{-# LANGUAGE TemplateHaskell #-}

module Rasa.Ext.StatusBar
  ( leftStatus
  , centerStatus
  , rightStatus
  , statusBar
  , left
  , center
  , right
  , StatusBar(..)
  ) where

import Control.Lens

import Data.Typeable
import Data.Default

import qualified Yi.Rope as Y

import Rasa.Ext

data StatusBar = StatusBar
  { _left :: [Y.YiString]
  , _center :: [Y.YiString]
  , _right :: [Y.YiString]
  } deriving (Typeable, Show, Eq)

makeLenses ''StatusBar

instance Default StatusBar where
  def = StatusBar
    { _left=[]
    , _center=[]
    , _right=[]
    }

statusBar :: Scheduler ()
statusBar = beforeEvent $ buffersDo_ clearStatus

clearStatus :: BufAction ()
clearStatus = do
  bufExt.left .= []
  bufExt.center .= []
  bufExt.right .= []

leftStatus :: Y.YiString -> BufAction ()
leftStatus txt = bufExt.left %= (txt:)

centerStatus :: Y.YiString -> BufAction ()
centerStatus txt = bufExt.center %= (txt:)

rightStatus :: Y.YiString -> BufAction ()
rightStatus txt = bufExt.right %= (txt:)