module Matterhorn.Draw.ReactionEmojiListOverlay
  ( drawReactionEmojiListOverlay
  )
where

import           Prelude ()
import           Matterhorn.Prelude

import           Brick
import           Brick.Widgets.List ( listSelectedFocusedAttr )
import qualified Data.Text as T

import           Matterhorn.Draw.ListOverlay ( drawListOverlay, OverlayPosition(..) )
import           Matterhorn.Types
import           Matterhorn.Themes


drawReactionEmojiListOverlay :: ChatState -> Widget Name
drawReactionEmojiListOverlay :: ChatState -> Widget Name
drawReactionEmojiListOverlay ChatState
st =
    let overlay :: Widget Name
overlay = ListOverlayState (Bool, Text) ()
-> (() -> Widget Name)
-> (() -> Widget Name)
-> (() -> Widget Name)
-> (Bool -> (Bool, Text) -> Widget Name)
-> Maybe (Widget Name)
-> OverlayPosition
-> Int
-> Widget Name
forall a b.
ListOverlayState a b
-> (b -> Widget Name)
-> (b -> Widget Name)
-> (b -> Widget Name)
-> (Bool -> a -> Widget Name)
-> Maybe (Widget Name)
-> OverlayPosition
-> Int
-> Widget Name
drawListOverlay (ChatState
stChatState
-> Getting
     (ListOverlayState (Bool, Text) ())
     ChatState
     (ListOverlayState (Bool, Text) ())
-> ListOverlayState (Bool, Text) ()
forall s a. s -> Getting a s a -> a
^.(TeamState -> Const (ListOverlayState (Bool, Text) ()) TeamState)
-> ChatState -> Const (ListOverlayState (Bool, Text) ()) ChatState
Lens' ChatState TeamState
csCurrentTeam((TeamState -> Const (ListOverlayState (Bool, Text) ()) TeamState)
 -> ChatState -> Const (ListOverlayState (Bool, Text) ()) ChatState)
-> ((ListOverlayState (Bool, Text) ()
     -> Const
          (ListOverlayState (Bool, Text) ())
          (ListOverlayState (Bool, Text) ()))
    -> TeamState -> Const (ListOverlayState (Bool, Text) ()) TeamState)
-> Getting
     (ListOverlayState (Bool, Text) ())
     ChatState
     (ListOverlayState (Bool, Text) ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(ListOverlayState (Bool, Text) ()
 -> Const
      (ListOverlayState (Bool, Text) ())
      (ListOverlayState (Bool, Text) ()))
-> TeamState -> Const (ListOverlayState (Bool, Text) ()) TeamState
Lens' TeamState (ListOverlayState (Bool, Text) ())
tsReactionEmojiListOverlay)
                                  (Widget Name -> () -> Widget Name
forall a b. a -> b -> a
const (Widget Name -> () -> Widget Name)
-> Widget Name -> () -> Widget Name
forall a b. (a -> b) -> a -> b
$ Text -> Widget Name
forall n. Text -> Widget n
txt Text
"Search Emoji")
                                  (Widget Name -> () -> Widget Name
forall a b. a -> b -> a
const (Widget Name -> () -> Widget Name)
-> Widget Name -> () -> Widget Name
forall a b. (a -> b) -> a -> b
$ Text -> Widget Name
forall n. Text -> Widget n
txt Text
"No matching emoji found.")
                                  (Widget Name -> () -> Widget Name
forall a b. a -> b -> a
const (Widget Name -> () -> Widget Name)
-> Widget Name -> () -> Widget Name
forall a b. (a -> b) -> a -> b
$ Text -> Widget Name
forall n. Text -> Widget n
txt Text
"Search emoji:")
                                  Bool -> (Bool, Text) -> Widget Name
renderEmoji
                                  Maybe (Widget Name)
forall a. Maybe a
Nothing
                                  OverlayPosition
OverlayCenter
                                  Int
80
    in Widget Name -> Widget Name
forall n. Widget n -> Widget n
joinBorders Widget Name
overlay

renderEmoji :: Bool -> (Bool, T.Text) -> Widget Name
renderEmoji :: Bool -> (Bool, Text) -> Widget Name
renderEmoji Bool
sel (Bool
mine, Text
e) =
    let maybeForce :: Widget n -> Widget n
maybeForce = if Bool
sel
                     then AttrName -> Widget n -> Widget n
forall n. AttrName -> Widget n -> Widget n
forceAttr AttrName
listSelectedFocusedAttr
                     else Widget n -> Widget n
forall a. a -> a
id
    in Name -> Widget Name -> Widget Name
forall n. n -> Widget n -> Widget n
clickable ((Bool, Text) -> Name
ReactionEmojiListOverlayEntry (Bool
mine, Text
e)) (Widget Name -> Widget Name) -> Widget Name -> Widget Name
forall a b. (a -> b) -> a -> b
$
       Widget Name -> Widget Name
forall n. Widget n -> Widget n
maybeForce (Widget Name -> Widget Name) -> Widget Name -> Widget Name
forall a b. (a -> b) -> a -> b
$
       Padding -> Widget Name -> Widget Name
forall n. Padding -> Widget n -> Widget n
padRight Padding
Max (Widget Name -> Widget Name) -> Widget Name -> Widget Name
forall a b. (a -> b) -> a -> b
$
       [Widget Name] -> Widget Name
forall n. [Widget n] -> Widget n
hBox [ if Bool
mine then Text -> Widget Name
forall n. Text -> Widget n
txt Text
" * " else Text -> Widget Name
forall n. Text -> Widget n
txt Text
"   "
            , AttrName -> Widget Name -> Widget Name
forall n. AttrName -> Widget n -> Widget n
withDefAttr AttrName
emojiAttr (Widget Name -> Widget Name) -> Widget Name -> Widget Name
forall a b. (a -> b) -> a -> b
$ Text -> Widget Name
forall n. Text -> Widget n
txt (Text -> Widget Name) -> Text -> Widget Name
forall a b. (a -> b) -> a -> b
$ Text
":" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
e Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
":"
            ]