module System.Log.Simple.Text (
    defaultTimeFormat,
    textFmt, text
    ) where

import Data.Text (Text)
import qualified Data.Text as T
import Data.Time
import System.Locale
import System.Log.Simple.Base

-- | Default time format
defaultTimeFormat :: String
defaultTimeFormat = "%d/%m/%y %T %z"

-- | Text log converter with time format
textFmt :: String -> Converter Text
textFmt fmt (Message tm l p msg) = T.intercalate (T.pack "\t") [T.pack s, T.pack (toStr l), msg'] where
    s = formatTime defaultTimeLocale fmt tm
    msg' = T.concat [T.intercalate (T.pack "/") p, T.pack "> ", msg]
    toStr Trace = "TRACE"
    toStr Debug = "DEBUG"
    toStr Info = "INFO"
    toStr Warning = "WARN"
    toStr Error = "ERROR"
    toStr Fatal = "FATAL"

-- | Text log converter with default time format
text :: Converter Text
text = textFmt defaultTimeFormat