{-# LANGUAGE ConstraintKinds, RankNTypes, FlexibleContexts #-}
module Network.Anticiv.Modules.Barkeeper (initBarkeeper, listBarkeeper) where

import Control.Monad
import Data.Char
import Data.Chatty.Atoms
import Data.Chatty.Hetero
import Network.Anticiv.Convenience
import Network.Anticiv.Masks
import Network.Anticiv.Monad
import Text.Printf

initBarkeeper :: Packciv (Packciv [String])
initBarkeeper = do
  regPriorityChanmsg msg
  return listBarkeeper

listBarkeeper :: Packciv [String]
listBarkeeper = return ["beer","vodka","vplus"]
  
msg :: Atom Handler -> UserA -> String -> Anticiv Bool
msg _ u s = do
  pref <- bprefix
  s & pref :-: LocalT u "beer" :-: ChannelUser #-> (actionfl "Beer" . userNick <=< getAtom)
   .|| pref :-: LocalT u "vodka" :-: ChannelUser #-> (actionfl "Vodka" . userNick <=< getAtom)
   .|| pref :-: LocalT u "vplus" :-: ChannelUser #->> addressfl u "VPlus"