module Matterhorn.Events.ShowHelp where

import           Prelude ()
import           Matterhorn.Prelude

import           Brick
import qualified Graphics.Vty as Vty

import           Network.Mattermost.Types ( TeamId )

import           Matterhorn.Constants
import           Matterhorn.Events.Keybindings
import           Matterhorn.Types


onEventShowHelp :: TeamId -> Vty.Event -> MH Bool
onEventShowHelp :: TeamId -> Event -> MH Bool
onEventShowHelp TeamId
tId =
    [Event -> MH Bool] -> Event -> MH Bool
handleEventWith [ (KeyConfig -> KeyHandlerMap) -> Event -> MH Bool
handleKeyboardEvent (TeamId -> KeyConfig -> KeyHandlerMap
helpKeybindings TeamId
tId)
                    , TeamId -> Event -> MH Bool
closeHelp TeamId
tId
                    ]

closeHelp :: TeamId -> Vty.Event -> MH Bool
closeHelp :: TeamId -> Event -> MH Bool
closeHelp TeamId
tId (Vty.EvKey {}) = do
    TeamId -> MH ()
popMode TeamId
tId
    Bool -> MH Bool
forall (m :: * -> *) a. Monad m => a -> m a
return Bool
True
closeHelp TeamId
_ Event
_ = Bool -> MH Bool
forall (m :: * -> *) a. Monad m => a -> m a
return Bool
False

helpKeybindings :: TeamId -> KeyConfig -> KeyHandlerMap
helpKeybindings :: TeamId -> KeyConfig -> KeyHandlerMap
helpKeybindings TeamId
tId = [KeyEventHandler] -> KeyConfig -> KeyHandlerMap
mkKeybindings (TeamId -> [KeyEventHandler]
helpKeyHandlers TeamId
tId)

helpKeyHandlers :: TeamId -> [KeyEventHandler]
helpKeyHandlers :: TeamId -> [KeyEventHandler]
helpKeyHandlers TeamId
tId =
    [ KeyEvent -> Text -> MH () -> KeyEventHandler
mkKb KeyEvent
ScrollUpEvent Text
"Scroll up" (MH () -> KeyEventHandler) -> MH () -> KeyEventHandler
forall a b. (a -> b) -> a -> b
$
        EventM Name () -> MH ()
forall a. EventM Name a -> MH a
mh (EventM Name () -> MH ()) -> EventM Name () -> MH ()
forall a b. (a -> b) -> a -> b
$ ViewportScroll Name -> Int -> EventM Name ()
forall n. ViewportScroll n -> Int -> EventM n ()
vScrollBy (Name -> ViewportScroll Name
forall n. n -> ViewportScroll n
viewportScroll Name
HelpViewport) (-Int
1)
    , KeyEvent -> Text -> MH () -> KeyEventHandler
mkKb KeyEvent
ScrollDownEvent Text
"Scroll down" (MH () -> KeyEventHandler) -> MH () -> KeyEventHandler
forall a b. (a -> b) -> a -> b
$
        EventM Name () -> MH ()
forall a. EventM Name a -> MH a
mh (EventM Name () -> MH ()) -> EventM Name () -> MH ()
forall a b. (a -> b) -> a -> b
$ ViewportScroll Name -> Int -> EventM Name ()
forall n. ViewportScroll n -> Int -> EventM n ()
vScrollBy (Name -> ViewportScroll Name
forall n. n -> ViewportScroll n
viewportScroll Name
HelpViewport) Int
1
    , KeyEvent -> Text -> MH () -> KeyEventHandler
mkKb KeyEvent
PageUpEvent Text
"Page up" (MH () -> KeyEventHandler) -> MH () -> KeyEventHandler
forall a b. (a -> b) -> a -> b
$
        EventM Name () -> MH ()
forall a. EventM Name a -> MH a
mh (EventM Name () -> MH ()) -> EventM Name () -> MH ()
forall a b. (a -> b) -> a -> b
$ ViewportScroll Name -> Int -> EventM Name ()
forall n. ViewportScroll n -> Int -> EventM n ()
vScrollBy (Name -> ViewportScroll Name
forall n. n -> ViewportScroll n
viewportScroll Name
HelpViewport) (-Int
1 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
pageAmount)
    , KeyEvent -> Text -> MH () -> KeyEventHandler
mkKb KeyEvent
PageDownEvent Text
"Page down" (MH () -> KeyEventHandler) -> MH () -> KeyEventHandler
forall a b. (a -> b) -> a -> b
$
        EventM Name () -> MH ()
forall a. EventM Name a -> MH a
mh (EventM Name () -> MH ()) -> EventM Name () -> MH ()
forall a b. (a -> b) -> a -> b
$ ViewportScroll Name -> Int -> EventM Name ()
forall n. ViewportScroll n -> Int -> EventM n ()
vScrollBy (Name -> ViewportScroll Name
forall n. n -> ViewportScroll n
viewportScroll Name
HelpViewport) (Int
1 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
pageAmount)
    , KeyEvent -> Text -> MH () -> KeyEventHandler
mkKb KeyEvent
CancelEvent Text
"Close the help window" (MH () -> KeyEventHandler) -> MH () -> KeyEventHandler
forall a b. (a -> b) -> a -> b
$
        TeamId -> MH ()
popMode TeamId
tId
    , KeyEvent -> Text -> MH () -> KeyEventHandler
mkKb KeyEvent
ScrollBottomEvent Text
"Scroll to the end of the help" (MH () -> KeyEventHandler) -> MH () -> KeyEventHandler
forall a b. (a -> b) -> a -> b
$
        EventM Name () -> MH ()
forall a. EventM Name a -> MH a
mh (EventM Name () -> MH ()) -> EventM Name () -> MH ()
forall a b. (a -> b) -> a -> b
$ ViewportScroll Name -> EventM Name ()
forall n. ViewportScroll n -> EventM n ()
vScrollToEnd (Name -> ViewportScroll Name
forall n. n -> ViewportScroll n
viewportScroll Name
HelpViewport)
    , KeyEvent -> Text -> MH () -> KeyEventHandler
mkKb KeyEvent
ScrollTopEvent Text
"Scroll to the beginning of the help" (MH () -> KeyEventHandler) -> MH () -> KeyEventHandler
forall a b. (a -> b) -> a -> b
$
        EventM Name () -> MH ()
forall a. EventM Name a -> MH a
mh (EventM Name () -> MH ()) -> EventM Name () -> MH ()
forall a b. (a -> b) -> a -> b
$ ViewportScroll Name -> EventM Name ()
forall n. ViewportScroll n -> EventM n ()
vScrollToBeginning (Name -> ViewportScroll Name
forall n. n -> ViewportScroll n
viewportScroll Name
HelpViewport)
    ]