{-# LANGUAGE NoImplicitPrelude #-}

module Events.Actions.Modal
    ( event
    ) where

import ClassyPrelude

import Control.Lens ((^.))

import Events.State.Types        (Stateful, mode)
import Events.State.Types.Mode   (ModalType (..), Mode (Modal))
import Graphics.Vty.Input.Events

import qualified Events.Actions.Modal.Detail as Detail
import qualified Events.Actions.Modal.Help   as Help
import qualified Events.Actions.Modal.MoveTo as MoveTo

event :: Event -> Stateful
event e s =
    case s ^. mode of
        Modal Help         -> Help.event e s
        Modal (Detail _ _) -> Detail.event e s
        Modal MoveTo       -> MoveTo.event e s
        _                  -> pure s