{-# LANGUAGE TypeFamilies #-}

module Celtchar.Metadata
  ( parseMetadata
  ) where

import           Data.String
import           Data.Void            (Void)
import           Text.Megaparsec
import           Text.Megaparsec.Char

parseMetadata :: (Stream a, Token a ~ Char, IsString b)
              => String
              -> a
              -> Either (ParseError Char Void) (Maybe b, b)
parseMetadata = runParser (do
    metadata <- try metadata <|> return Nothing
    text <- manyTill anyChar eof
    return (metadata, fromString text))

  where
    metadata = do
      space
      some $ char '-'
      char '\n'
      space
      m <- manyTill anyChar (try $ do char '\n'
                                      some $ char '-'
                                      char '\n')
      space
      return $ Just $ fromString m