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

import Data.Time
import Text.Format

import System.Log.Simple.Base

-- | Default time format
defaultTimeFormat  String
defaultTimeFormat = "%_Y-%m-%d %T.%3q %z"

textFmt  FormatResult r  String  String  Converter r
textFmt tmFmt msgFmt (Message tm l comp scope msg) = format msgFmt ~~ args where
        args = [
                "time" ~% formatTime defaultTimeLocale tmFmt tm,
                "level" ~% l,
                "component" ~% comp,
                "scope" ~% scope,
                "message" ~% msg]

-- | Text log converter with default time format
text  FormatResult r  Converter r
text = textFmt defaultTimeFormat "{time:cyan}\t{level}\t{component:magenta}:{scope:green}> {message}"

shortText  FormatResult r  Converter r
shortText = textFmt defaultTimeFormat "{level}\t{component:magenta}: {message}"

msgOnly  FormatResult r  Converter r
msgOnly = textFmt defaultTimeFormat "{message}"