{-# OPTIONS_HADDOCK hide #-}

module Codec.Binary.QRCode.FormatInfo where

import Codec.Binary.QRCode.Spec
import Codec.Binary.QRCode.Utils

import Codec.Binary.QRCode.GaloisField

import Data.Bits

encode :: ErrorLevel -> BitStream -> BitStream
encode ec maskPatRef = showBinPadded 15 $ encoded `xor` qrFormatInfoMask
    where
        ecIndicator = qrErrorLevelIndicators ec
        input = ecIndicator ++ maskPatRef
        inputPoly = gfpRightPad 10 $ toPoly input
        encoded = gfpToBinaryRepr $ gfpAdd inputPoly (snd $ gfpQuotRem inputPoly qrFormatInfoGenPoly)