module Waldo.Waldo (
    WaldoData(..)
  , loadWaldo
  ) where

import Control.Monad
import Data.HashMap.Strict (HashMap)
import qualified Data.HashMap.Strict as Map
import qualified Data.Text as T

import Waldo.Stalk
import Waldo.Script

data WaldoData =
  WaldoData {
      wdStalkDB :: StalkDB
    , wdGenScript :: HashMap T.Text (PersonalData -> IO Script)
    }

loadWaldo :: FilePath -> [(T.Text, IO (PersonalData -> IO Script))] ->IO WaldoData
loadWaldo dd storyGenLoaders = do
    sdb <- loadStalkDB dd
    storyGens <- forM storyGenLoaders $ \(nm, ldr) -> do
      sgen <- ldr
      return (nm, sgen)
    let wdata = WaldoData { wdStalkDB = sdb
                          , wdGenScript = Map.fromList storyGens
                          }
    putStrLn "Loading completed!"
    return wdata
