{-# LANGUAGE OverloadedStrings #-}
module Codec.Xlsx.Types.Internal.DvPair where

import qualified Data.Map                   as M
import           Text.XML                   (Element (..))

import           Codec.Xlsx.Parser.Internal
import           Codec.Xlsx.Types.Common
import           Codec.Xlsx.Types.DataValidation
import           Codec.Xlsx.Writer.Internal


-- | Internal helper type for parsing data validation records
--
-- See 18.3.1.32 "dataValidation (Data Validation)" (p. 1614/1624)
newtype DvPair = DvPair
    { unDvPair :: (SqRef, DataValidation)
    } deriving (Eq, Show)

instance FromCursor DvPair where
    fromCursor cur = do
        sqref <- fromAttribute "sqref" cur
        dv    <- fromCursor cur
        return $ DvPair (sqref, dv)

instance ToElement DvPair where
    toElement nm (DvPair (sqRef,dv)) = e
        {elementAttributes = M.insert "sqref" (toAttrVal sqRef) $ elementAttributes e}
      where
        e = toElement nm dv