module Taskell.UI.Theme
    ( titleAttr
    , statusBarAttr
    , titleCurrentAttr
    , taskCurrentAttr
    , subtaskCurrentAttr
    , subtaskCompleteAttr
    , subtaskIncompleteAttr
    , taskAttr
    , disabledAttr
    , dlToAttr
    , defaultTheme
    ) where

import Brick        (AttrName, attrName)
import Brick.Themes (Theme, newTheme)
import Brick.Util   (fg, on)
import Graphics.Vty

import Taskell.Data.Date (Deadline (..))

-- attrs
statusBarAttr :: AttrName
statusBarAttr :: AttrName
statusBarAttr = String -> AttrName
attrName String
"statusBar"

titleAttr :: AttrName
titleAttr :: AttrName
titleAttr = String -> AttrName
attrName String
"title"

titleCurrentAttr :: AttrName
titleCurrentAttr :: AttrName
titleCurrentAttr = String -> AttrName
attrName String
"titleCurrent"

taskCurrentAttr :: AttrName
taskCurrentAttr :: AttrName
taskCurrentAttr = String -> AttrName
attrName String
"taskCurrent"

taskAttr :: AttrName
taskAttr :: AttrName
taskAttr = String -> AttrName
attrName String
"task"

subtaskCurrentAttr :: AttrName
subtaskCurrentAttr :: AttrName
subtaskCurrentAttr = String -> AttrName
attrName String
"subtaskCurrent"

subtaskCompleteAttr :: AttrName
subtaskCompleteAttr :: AttrName
subtaskCompleteAttr = String -> AttrName
attrName String
"subtaskComplete"

subtaskIncompleteAttr :: AttrName
subtaskIncompleteAttr :: AttrName
subtaskIncompleteAttr = String -> AttrName
attrName String
"subtaskIncomplete"

disabledAttr :: AttrName
disabledAttr :: AttrName
disabledAttr = String -> AttrName
attrName String
"disabled"

dlDue, dlSoon, dlFar :: AttrName
dlDue :: AttrName
dlDue = String -> AttrName
attrName String
"dlDue"

dlSoon :: AttrName
dlSoon = String -> AttrName
attrName String
"dlSoon"

dlFar :: AttrName
dlFar = String -> AttrName
attrName String
"dlFar"

-- convert deadline into attribute
dlToAttr :: Deadline -> AttrName
dlToAttr :: Deadline -> AttrName
dlToAttr Deadline
dl =
    case Deadline
dl of
        Deadline
Plenty   -> AttrName
dlFar
        Deadline
ThisWeek -> AttrName
dlSoon
        Deadline
Tomorrow -> AttrName
dlSoon
        Deadline
Today    -> AttrName
dlDue
        Deadline
Passed   -> AttrName
dlDue

-- default theme
defaultTheme :: Theme
defaultTheme :: Theme
defaultTheme =
    Attr -> [(AttrName, Attr)] -> Theme
newTheme
        Attr
defAttr
        [ (AttrName
statusBarAttr, Color
black Color -> Color -> Attr
`on` Color
green)
        , (AttrName
titleAttr, Color -> Attr
fg Color
green)
        , (AttrName
titleCurrentAttr, Color -> Attr
fg Color
blue)
        , (AttrName
taskCurrentAttr, Color -> Attr
fg Color
magenta)
        , (AttrName
subtaskCurrentAttr, Color -> Attr
fg Color
magenta)
        , (AttrName
subtaskIncompleteAttr, Color -> Attr
fg Color
blue)
        , (AttrName
subtaskCompleteAttr, Color -> Attr
fg Color
yellow)
        , (AttrName
taskCurrentAttr, Color -> Attr
fg Color
magenta)
        , (AttrName
disabledAttr, Color -> Attr
fg Color
yellow)
        , (AttrName
dlDue, Color -> Attr
fg Color
red)
        , (AttrName
dlSoon, Color -> Attr
fg Color
yellow)
        , (AttrName
dlFar, Color -> Attr
fg Color
green)
        ]