module ProjectM36.DataTypes.Day where
import ProjectM36.Base
import ProjectM36.AtomFunctionBody
import qualified Data.HashSet as HS
import Data.Time.Calendar

dayAtomFunctions :: AtomFunctions
dayAtomFunctions = HS.fromList [
  AtomFunction { atomFuncName = "fromGregorian",
                 atomFuncType = [IntAtomType, IntAtomType, IntAtomType, DayAtomType],
                 atomFuncBody = compiledAtomFunctionBody $ \(IntAtom year:IntAtom month:IntAtom day:_) -> pure $ DayAtom (fromGregorian (fromIntegral year) (fromIntegral month) (fromIntegral day))
                 },
  AtomFunction { atomFuncName = "dayEarlierThan",
                 atomFuncType = [DayAtomType, DayAtomType, BoolAtomType],
                 atomFuncBody = compiledAtomFunctionBody $ \(ConstructedAtom _ _ (IntAtom dayA:_):ConstructedAtom _ _ (IntAtom dayB:_):_) -> pure (BoolAtom (dayA < dayB))
               }
  ]

dayTypeConstructorMapping :: TypeConstructorMapping
dayTypeConstructorMapping = [] -- use fromGregorian