module Text.Pandoc.CrossRef.Util.CustomLabels (customLabel) where

import Text.Pandoc.Definition
import Text.Pandoc.CrossRef.Util.Meta
import Control.Monad
import Data.List
import Text.Numeral.Roman

customLabel :: Meta -> String -> Int -> Maybe String
customLabel meta ref i
  | refLabel <- takeWhile (/=':') ref
  , Just cl <- lookupMeta (refLabel++"Labels") meta
  = mkLabel i cl
  | otherwise = Nothing

mkLabel :: Int -> MetaValue -> Maybe String
mkLabel i lt
  | toString lt == Just "arabic"
  = Nothing
  | toString lt == Just "roman"
  = Just $ toRoman i
  | Just (startWith:_) <- join $ stripPrefix "alpha " `fmap` toString lt
  = Just [[startWith..] !! (i-1)]
  | Just val <- join $ toString `fmap` getList (i-1) lt
  = Just val
  | otherwise = error $ "Unknown numeration type: " ++ show lt