{-# LANGUAGE OverloadedStrings #-}

import           Control.Monad.Reader
import           Control.Monad.State.Strict
import qualified Data.ByteString.Char8 as BC
import qualified Data.Vector as V
import           Escoger.Interactive
import           Escoger.Internal
import           Graphics.Vty
import           System.Posix.IO

main :: IO ()
main = do
  content <- BC.getContents
  let content' = (V.filter (not . BC.null) . V.fromList . BC.split '\n') content
  ifd <- openFd "/dev/tty" ReadOnly Nothing defaultFileFlags
  ofd <- openFd "/dev/tty" WriteOnly Nothing defaultFileFlags
  vty <- mkVty defaultConfig { inputFd = Just ifd, outputFd = Just ofd }
  selection <- flip evalStateT (SearchState content' "" 1) $
    flip runReaderT (SearchData content' vty) $
      interactiveLoop
  BC.putStrLn selection