{-# LANGUAGE OverloadedStrings #-}

module Web.SocketIO.Util ((<>), debug) where

--------------------------------------------------------------------------------
import Control.Concurrent.Chan
import Control.Monad.Trans 					(liftIO, MonadIO)
--------------------------------------------------------------------------------
import Web.SocketIO.Types

--------------------------------------------------------------------------------
debug :: (Functor m, MonadIO m, ConnectionLayer m) => Log -> m ()
debug message = do
    logLevel' <- fmap logLevel getConfiguration
    stdout' <- fmap stdout getEnv
    if level <= logLevel' then liftIO $ writeChan stdout' (show message) else return ()
    where   levelOf (Error _)   = 0
            levelOf (Warn  _)   = 1
            levelOf (Info  _)   = 2
            levelOf (Debug _)   = 3

            level = levelOf message