module Amby.Theme
  ( Theme

  -- * Themes
  , mutedTheme
  , deepTheme
  , cleanTheme

  -- * Accessors
  , getBgColor
  , getPlotBgColor
  , getGridLineColor
  , getColorCycle
  , getFontFamily
  , getFontSize
  )
  where

import Data.Colour
import Data.Colour.SRGB
import Data.Default.Class

data Theme = Theme
  { bgColor :: AlphaColour Double
  , plotBgColor :: AlphaColour Double
  , gridLineColor :: AlphaColour Double
  , fontFamily :: String
  , fontSize :: Double
  , colorCycle :: [AlphaColour Double]
  }

instance Default Theme where
  def = deepTheme

mutedTheme :: Theme
mutedTheme = Theme
  { bgColor = opaque (sRGB24read "#FFFFFF")
  , plotBgColor = opaque (sRGB24read "#EAEAF2")
  , gridLineColor = opaque (sRGB24read "#FFFFFF")
  , fontFamily = "Verdana"
  , fontSize = 14
  , colorCycle =
    [ opaque (sRGB24read "#4878CF")
    , opaque (sRGB24read "#6ACC65")
    , opaque (sRGB24read "#D65F5F")
    , opaque (sRGB24read "#B47CC7")
    , opaque (sRGB24read "#C4AD66")
    , opaque (sRGB24read "#77BEDB")
    ]
  }

deepTheme :: Theme
deepTheme = Theme
  { bgColor = opaque (sRGB24read "#FFFFFF")
  , plotBgColor = opaque (sRGB24read "#EAEAF2")
  , gridLineColor = opaque (sRGB24read "#FFFFFF")
  , fontFamily = "Verdana"
  , fontSize = 14
  , colorCycle =
    [ opaque (sRGB24read "#4C72B0")
    , opaque (sRGB24read "#55A868")
    , opaque (sRGB24read "#C44E52")
    , opaque (sRGB24read "#8172B2")
    , opaque (sRGB24read "#CCB974")
    , opaque (sRGB24read "#64B5CD")
    ]
  }

cleanTheme :: Theme
cleanTheme = def
  { bgColor = opaque (sRGB24read "#FFFFFF")
  , plotBgColor = opaque (sRGB24read "#FFFFFF")
  , gridLineColor = opaque (sRGB24read "#EEEEEE")
  , colorCycle =
    [ opaque (sRGB24read "#1776B6")
    , opaque (sRGB24read "#FF962A")
    , opaque (sRGB24read "#24A122")
    , opaque (sRGB24read "#CF0407")
    , opaque (sRGB24read "#9564BF")
    ]
  }

getBgColor :: Theme -> AlphaColour Double
getBgColor = bgColor

getPlotBgColor :: Theme -> AlphaColour Double
getPlotBgColor = plotBgColor

getGridLineColor :: Theme -> AlphaColour Double
getGridLineColor = gridLineColor

getColorCycle :: Theme -> [AlphaColour Double]
getColorCycle = colorCycle

getFontFamily :: Theme -> String
getFontFamily = fontFamily

getFontSize :: Theme -> Double
getFontSize = fontSize