module Network.IRC.Bot.Part.Hello where

import Control.Monad.Trans      (liftIO)
import Data.Maybe               (fromMaybe)
import Network.IRC.Bot.Log      (LogLevel(Debug))
import Network.IRC.Bot.BotMonad (BotMonad(..), maybeZero)
import Network.IRC.Bot.Commands (PrivMsg(..),askSenderNickName, replyTo, sendCommand)
import Network.IRC.Bot.Parsec   (botPrefix, parsecPart)
import System.Random            (randomRIO)
import Text.Parsec              (ParsecT, (<|>), string, try)

helloPart :: (BotMonad m) => m ()
helloPart = parsecPart helloCommand

helloCommand :: (BotMonad m) => ParsecT String () m ()
helloCommand =
    do try $ botPrefix >> string "hello"
       logM Debug "helloPart"
       target <- maybeZero =<< replyTo
       logM Debug $ "target: " ++ target
       mNick <- askSenderNickName
       let greetings = ["Hello", "Howdy", "Greetings", "Word up"]
       n <- liftIO $ randomRIO (0, length greetings - 1)
       let msg = greetings!!n ++ ", " ++ (fromMaybe "stranger" mNick)
       sendCommand (PrivMsg Nothing [target] msg)
    <|> return ()