{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}

module Faker.Provider.Cosmere where

import Config
import Control.Monad.IO.Class
import Data.Map.Strict (Map)
import Data.Monoid ((<>))
import Data.Text (Text)
import Data.Vector (Vector)
import Data.Yaml
import Faker
import Faker.Internal
import Faker.Provider.TH
import Language.Haskell.TH

parseCosmere :: FromJSON a => FakerSettings -> Value -> Parser a
parseCosmere settings (Object obj) = do
  en <- obj .: (getLocale settings)
  faker <- en .: "faker"
  cosmere <- faker .: "cosmere"
  pure cosmere
parseCosmere settings val = fail $ "expected Object, but got " <> (show val)

parseCosmereField ::
     (FromJSON a, Monoid a) => FakerSettings -> Text -> Value -> Parser a
parseCosmereField settings txt val = do
  cosmere <- parseCosmere settings val
  field <- cosmere .:? txt .!= mempty
  pure field

$(genParser "cosmere" "aons")

$(genProvider "cosmere" "aons")

$(genParser "cosmere" "shard_worlds")

$(genProvider "cosmere" "shard_worlds")

$(genParser "cosmere" "shards")

$(genProvider "cosmere" "shards")

$(genParser "cosmere" "surges")

$(genProvider "cosmere" "surges")

$(genParser "cosmere" "knights_radiant")

$(genProvider "cosmere" "knights_radiant")

$(genParser "cosmere" "metals")

$(genProvider "cosmere" "metals")

$(genParser "cosmere" "allomancers")

$(genProvider "cosmere" "allomancers")

$(genParser "cosmere" "feruchemists")

$(genProvider "cosmere" "feruchemists")

$(genParser "cosmere" "heralds")

$(genProvider "cosmere" "heralds")

$(genParser "cosmere" "sprens")

$(genProvider "cosmere" "sprens")