{-# LANGUAGE OverloadedStrings #-}
module Waldo.StoryExample (
    loadScriptGen
  ) where

import Control.Monad
import Control.Monad.Reader
import Data.ByteString.Char8 ()
import Data.Text ()

import Paths_waldo
import Waldo.Stalk
import Waldo.Script
import Waldo.Story
import Waldo.CityLoc

loadScriptGen :: IO (PersonalData -> IO Script)
loadScriptGen = do
  bp <- getDataDir
  flip runReaderT bp $ do
    defaultScript <- loadDefaultScript
    stories <- story1example
    return $ selectStory (knapsackSizer 100) defaultScript stories

-- If they really defeat our snooping, they get this one.
loadDefaultScript :: ReaderT FilePath IO Script
loadDefaultScript = do
    p1 <- loadImagePanels 1 1 0
    p2 <- loadImagePanels 1 2 0
    p3 <- loadImagePanels 1 3 0
    p4 <- loadImagePanels 1 4 0
    return $ mkScript "failback" alt $ map head [p1, p2, p3, p4 ]
  where
    alt = "This is the testiest test ever!"

story1example :: ReaderT FilePath IO [StoryOption]
story1example = do
  s1p1c0 <- loadImagePanels 1 1 0
  s1p1c1 <- loadImagePanels 1 1 1
  s1p1c2 <- loadImagePanels 1 1 2
  s1p1c3 <- loadImagePanels 1 1 3
  
  s1p2 <- loadImagePanels 1 2 0
              
  s1p3 <- loadImagePanels 1 3 0
  
  s1p4c0 <- loadImagePanels 1 4 0
  s1p4c1 <- loadImagePanels 1 4 1
    
  return [
      do
         isIn "NA" -- Only for North Americans
         p1 <- msum [ orgIs "Massachusetts Institute of Technology" `allocate` s1p1c1
                    , closeTo sydney `allocate` s1p1c2
                    , closeTo sanFran `allocate` s1p1c3
                    , return s1p1c0
                    ]
         p4 <- msum [ osIs BSD `allocate` s1p4c1
                    , osIs Linux `allocate` s1p4c0
                    ]
         return $ Story {
             storyAltText   = "Alt"
           , storyPanelSets = [ p1, s1p2, s1p3, p4 ]
           , storyPadX = 0, storyPadY = 0
           , storyName = "s01"
           }
    ]
