module Rasa.Renderer.Slate (slate, terminalEvents) where

import Rasa.Ext
import Rasa.Renderer.Slate.Render (render)
import Rasa.Renderer.Slate.Event (terminalEvents)
import Rasa.Renderer.Slate.State (getVty)

import qualified Graphics.Vty as V
import Control.Monad.IO.Class

-- | The main export for this extension. Add this to your user config.
--
-- e.g.
--
-- > rasa [...] $ do
-- >    slate
-- >    ...
slate :: Scheduler ()
slate = do
  onRender render
  onExit shutdown

-- | Call vty shutdown procedure (if this doesn't happen the terminal ends up in strange states)
shutdown :: Action ()
shutdown = do
  v <- getVty
  liftIO $ V.shutdown v