-- | Options applicable to multiple Cabin reports.

module Penny.Cabin.Options where

import qualified Penny.Cabin.Chunk as C
import qualified Penny.Shield as S

-- | The user's color preference.
data ColorPref = Pref0 | Pref8 | Pref256 | PrefAuto
               deriving Show

maxCapableColors :: S.Runtime -> C.Colors
maxCapableColors r = case S.output r of
  S.NotTTY -> C.Colors0
  S.IsTTY ->
    case lookup "TERM" (S.environment r) of
      Nothing -> C.Colors8
      (Just t) -> if t == "xterm-256color"
                  then C.Colors256
                  else C.Colors8

autoColors :: ColorPref -> S.Runtime -> C.Colors
autoColors c r = case c of
  Pref0 -> C.Colors0
  Pref8 -> C.Colors8
  Pref256 -> C.Colors256
  PrefAuto -> maxCapableColors r

-- | Whether to show zero balances in reports.
newtype ShowZeroBalances =
  ShowZeroBalances { unShowZeroBalances :: Bool }
  deriving (Show, Eq)