module BattleNet.Yesod(YesodBattleNet(..), yesodBnetWithApp, yesodBnet) where

import BattleNet
import Yesod.Core
import Control.Monad
import Data.Text
import Network.HTTP.Conduit

class YesodBattleNet app where
    battleNetKey :: app -> BattleNetApiKey
    battleNetHttp :: app -> Manager

yesodBnetWithApp :: (YesodBattleNet app) => Text -> app -> (Manager -> BattleNetConnectionInfo -> IO a) -> IO a
yesodBnetWithApp region yesod endpoint =
        endpoint manager settings
    where settings = BattleNetConnectionInfo (battleNetKey yesod) region
          manager = battleNetHttp yesod

yesodBnet :: (MonadHandler m, YesodBattleNet (HandlerSite m)) => Text -> (Manager -> BattleNetConnectionInfo -> IO a) -> m a
yesodBnet region endpoint = getYesod >>= liftIO . flip (yesodBnetWithApp region) endpoint