--------------------------------------------------------------------------------
-- | Data types for logging
{-# LANGUAGE OverloadedStrings #-}

module Web.SocketIO.Types.Log (Log(..), Serializable(..)) where

--------------------------------------------------------------------------------
import System.Console.ANSI
import Web.SocketIO.Types.String

--------------------------------------------------------------------------------
-- | Logger
data Log = Error ByteString
         | Warn ByteString
         | Info ByteString
         | Debug ByteString
         deriving (Eq, Show)

instance Serializable Log where
    serialize (Error message) = fromString $ "    " ++ (paint Red    $ "[error] " ++ error (fromByteString message))
    serialize (Warn  message) = fromString $ "    " ++ (paint Yellow $ "[warn]  " ++ fromByteString message)
    serialize (Info  message) = fromString $ "    " ++ (paint Cyan   $ "[info]  " ++ fromByteString message)
    serialize (Debug message) = fromString $ "    " ++ (paint Black  $ "[debug] " ++ fromByteString message)

--------------------------------------------------------------------------------
-- | helper function
paint :: Color -> String -> String
paint color s = setSGRCode [SetColor Foreground Vivid color] ++ s ++ setSGRCode []