module ProjectM36.Atom where
import ProjectM36.Base
import ProjectM36.Error
import qualified Data.Text as T
--import Data.Time.Calendar
--import Data.Time.Clock
--import Data.ByteString (ByteString)
import Data.Monoid

relationForAtom :: Atom -> Either RelationalError Relation
relationForAtom (RelationAtom rel) = Right rel
relationForAtom _ = Left $ AttributeIsNotRelationValuedError ""

atomToText :: Atom -> T.Text
atomToText (IntegerAtom i) = (T.pack . show) i
atomToText (IntAtom i) = (T.pack . show) i
atomToText (DoubleAtom i) = (T.pack . show) i
atomToText (TextAtom i) = (T.pack . show) i --does this break quoting in CSV export?
atomToText (DayAtom i) = (T.pack . show) i
atomToText (DateTimeAtom i) = (T.pack . show) i
atomToText (ByteStringAtom i) = (T.pack . show) i
atomToText (BoolAtom i) = (T.pack . show) i
atomToText (IntervalAtom b e bo be) = beginp <> begin <> "," <> end <> endp
  where beginp = if bo then "(" else "["
        begin = atomToText b
        end = atomToText e
        endp = if be then ")" else "]"

atomToText (RelationAtom i) = (T.pack . show) i
atomToText (ConstructedAtom dConsName _ atoms) = dConsName <> dConsArgs
  where
    parensAtomToText a@(ConstructedAtom _ _ []) = atomToText a
    parensAtomToText a@ConstructedAtom{} = "(" <> atomToText a <> ")"
    parensAtomToText a = atomToText a
    
    dConsArgs = case atoms of
      [] -> ""
      args -> " " <> T.intercalate " " (map parensAtomToText args)