module Matterhorn.Events.Global
  ( globalKeybindings
  , globalKeyHandlers
  )
where

import           Brick.Keybindings

import           Matterhorn.Command
import           Matterhorn.Types
import           Matterhorn.State.Channels
import           Matterhorn.State.ChannelList
import           Matterhorn.State.Teams


globalKeybindings :: KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH
globalKeybindings :: KeyConfig KeyEvent -> KeyDispatcher KeyEvent MH
globalKeybindings KeyConfig KeyEvent
kc = forall k (m :: * -> *).
Ord k =>
KeyConfig k -> [KeyEventHandler k m] -> KeyDispatcher k m
unsafeKeyDispatcher KeyConfig KeyEvent
kc [MHKeyEventHandler]
globalKeyHandlers

globalKeyHandlers :: [MHKeyEventHandler]
globalKeyHandlers :: [MHKeyEventHandler]
globalKeyHandlers =
    [ forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m
onEvent KeyEvent
ToggleMessagePreviewEvent Text
"Toggle message preview"
        MH ()
toggleMessagePreview

    , forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m
onEvent KeyEvent
ToggleChannelListVisibleEvent Text
"Toggle channel list visibility"
        MH ()
toggleChannelListVisibility

    , forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m
onEvent KeyEvent
ToggleExpandedChannelTopicsEvent Text
"Toggle display of expanded channel topics"
        MH ()
toggleExpandedChannelTopics

    , forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m
onEvent KeyEvent
NextTeamEvent Text
"Switch to the next available team"
        MH ()
nextTeam

    , forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m
onEvent KeyEvent
PrevTeamEvent Text
"Switch to the previous available team"
        MH ()
prevTeam

    , forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m
onEvent KeyEvent
MoveCurrentTeamLeftEvent Text
"Move the current team to the left in the team list"
        MH ()
moveCurrentTeamLeft

    , forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m
onEvent KeyEvent
MoveCurrentTeamRightEvent Text
"Move the current team to the right in the team list"
        MH ()
moveCurrentTeamRight

    , forall k (m :: * -> *). k -> Text -> m () -> KeyEventHandler k m
onEvent
        KeyEvent
QuitEvent
        Text
"Quit"
        MH ()
requestQuit
    ]