module Game.Werewolf.Command.WolfHound (
chooseCommand,
) where
import Control.Lens
import Control.Monad.Except
import Control.Monad.Extra
import Data.Maybe
import Data.Text (Text)
import qualified Data.Text as T
import Game.Werewolf
import Game.Werewolf.Messages
import Game.Werewolf.Util
chooseCommand :: Text -> Text -> Command
chooseCommand callerName allegianceName = Command $ do
validatePlayer callerName callerName
unlessM (isPlayerWolfHound callerName) $ throwError [playerCannotDoThatMessage callerName]
unlessM isWolfHoundsTurn $ throwError [playerCannotDoThatRightNowMessage callerName]
when (isNothing mAllegiance) $ throwError [allegianceDoesNotExistMessage callerName allegianceName]
allegianceChosen .= mAllegiance
where
mAllegiance = case T.toLower allegianceName of
"villagers" -> Just Villagers
"werewolves" -> Just Werewolves
_ -> Nothing