{-# LANGUAGE OverloadedStrings #-}

module Text.Puzzles.Code where

import Data.Puzzles.Code
import Text.Puzzles.Util

import Data.Yaml

import Data.Maybe (catMaybes)

parseCode :: Value -> Parser [CodePart]
parseCode (Object v) = fmap catMaybes . sequenceA $
    [ fmap Rows'   <$> v .:? "cell_rows_bottom"
    , fmap Cols    <$> v .:? "cell_cols"
    , fmap RowsN'  <$> v .:? "node_rows_bottom"
    , fmap ColsN   <$> v .:? "node_cols"
    , fmap (LabelsN . fmap (fmap unAlpha . blankToMaybe)) <$> (do
        v' <- v .:? "node_labels"
        sequenceA (parseGrid <$> v'))
    ] 
parseCode _          = fail "expected object"