{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}

module Hero.Database
  ( ComicDB,
    getComics,
    load,
    dummy,
  )
where

import Data.Map (Map)
import qualified Data.Map as Map
import Dhall
import Hero.App
import Protolude
import Servant (Handler)

type ComicDB = (Map ComicId Comic)

instance Interpret Comic

load :: IO ComicDB
load = listToComicDB <$> input auto "./comic-database.dhall"

dummy :: IO ComicDB
dummy =
  return $
    listToComicDB
      [ Comic
          { comicId = "ComicId",
            comicPages = 10,
            comicName = "Dummy comic",
            comicIssue = "dummy issue",
            comicDescription = "Lorem ipsum"
          }
      ]

listToComicDB :: [Comic] -> ComicDB
listToComicDB ls = Map.fromList $ (,) <$> comicId <*> identity <$> ls

getComics :: ComicDB -> Handler [Comic]
getComics db = return $ Map.elems db