{-# 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.Due    as Due
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
        Modal Due {}    -> Due.event e s
        _               -> pure s