module Export.CSV (csvRemarks) where

import Ast
import Export.Generic

import Text.PrettyPrint
import Data.List (intersperse)

csvRemarks :: String -> [String] -> [Judgement] -> Doc
csvRemarks delimiter propertyList judgements = 
  (hcat $ (intersperse (text delimiter)) $ map text propertyList) $$
  (vcat $ map (formatJudgement delimiter propertyList) judgements)

formatJudgement :: String -> [String] -> Judgement -> Doc
formatJudgement delimiter properties judgement = 
  hcat $ (intersperse (text delimiter)) $ map (mapfun judgement) properties
  where
    mapfun = flip lookupProperty 

lookupProperty :: String -> Judgement -> Doc
lookupProperty name (Judgement (_, properties, _, _)) = 
  case (lookup name (map (\(Property (n,v)) -> (n,v)) properties)) of
    Nothing -> error "Property not found."
    Just(value) -> formatPropertyExp value

formatPropertyExp :: PropertyExp -> Doc
formatPropertyExp (Lookup (index, name)) =
  brackets $ int index <> text "." <> text name
formatPropertyExp (Value value) = text value
formatPropertyExp (Num value) = pointsDoc value