{-# LANGUAGE MultiWayIf #-}
{-# LANGUAGE PackageImports #-}
module Matterhorn.Draw (draw) where

import Prelude ()
import Matterhorn.Prelude

import Brick

import Lens.Micro.Platform ( _2, singular, _Just )

import Matterhorn.Draw.ChannelTopicWindow
import Matterhorn.Draw.DeleteChannelConfirm
import Matterhorn.Draw.LeaveChannelConfirm
import Matterhorn.Draw.Main
import Matterhorn.Draw.ThemeListOverlay
import Matterhorn.Draw.PostListOverlay
import Matterhorn.Draw.ShowHelp
import Matterhorn.Draw.UserListOverlay
import Matterhorn.Draw.ChannelListOverlay
import Matterhorn.Draw.ReactionEmojiListOverlay
import Matterhorn.Draw.TabbedWindow
import Matterhorn.Draw.ManageAttachments
import Matterhorn.Draw.NotifyPrefs
import Matterhorn.Types


draw :: ChatState -> [Widget Name]
draw :: ChatState -> [Widget Name]
draw ChatState
st =
    case ChatState
stChatState -> Getting Mode ChatState Mode -> Mode
forall s a. s -> Getting a s a -> a
^.(TeamState -> Const Mode TeamState)
-> ChatState -> Const Mode ChatState
Lens' ChatState TeamState
csCurrentTeam((TeamState -> Const Mode TeamState)
 -> ChatState -> Const Mode ChatState)
-> ((Mode -> Const Mode Mode) -> TeamState -> Const Mode TeamState)
-> Getting Mode ChatState Mode
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Mode -> Const Mode Mode) -> TeamState -> Const Mode TeamState
Lens' TeamState Mode
tsMode of
        Mode
Main                         -> [Widget Name]
mainLayers
        Mode
UrlSelect                    -> [Widget Name]
mainLayers
        Mode
ChannelSelect                -> [Widget Name]
mainLayers
        Mode
MessageSelect                -> [Widget Name]
mainLayers
        Mode
MessageSelectDeleteConfirm   -> [Widget Name]
mainLayers
        ShowHelp HelpTopic
topic Mode
_             -> HelpTopic -> ChatState -> [Widget Name]
drawShowHelp HelpTopic
topic ChatState
st
        Mode
ThemeListOverlay             -> ChatState -> Widget Name
drawThemeListOverlay ChatState
st Widget Name -> [Widget Name] -> [Widget Name]
forall a. a -> [a] -> [a]
: [Widget Name]
mainLayers
        Mode
LeaveChannelConfirm          -> ChatState -> Widget Name
drawLeaveChannelConfirm ChatState
st Widget Name -> [Widget Name] -> [Widget Name]
forall a. a -> [a] -> [a]
: [Widget Name]
mainLayersMonochrome
        Mode
DeleteChannelConfirm         -> ChatState -> Widget Name
drawDeleteChannelConfirm ChatState
st Widget Name -> [Widget Name] -> [Widget Name]
forall a. a -> [a] -> [a]
: [Widget Name]
mainLayersMonochrome
        PostListOverlay PostListContents
contents     -> PostListContents -> ChatState -> Widget Name
drawPostListOverlay PostListContents
contents ChatState
st Widget Name -> [Widget Name] -> [Widget Name]
forall a. a -> [a] -> [a]
: [Widget Name]
mainLayersMonochrome
        Mode
UserListOverlay              -> ChatState -> Widget Name
drawUserListOverlay ChatState
st Widget Name -> [Widget Name] -> [Widget Name]
forall a. a -> [a] -> [a]
: [Widget Name]
mainLayersMonochrome
        Mode
ChannelListOverlay           -> ChatState -> Widget Name
drawChannelListOverlay ChatState
st Widget Name -> [Widget Name] -> [Widget Name]
forall a. a -> [a] -> [a]
: [Widget Name]
mainLayersMonochrome
        Mode
ReactionEmojiListOverlay     -> ChatState -> Widget Name
drawReactionEmojiListOverlay ChatState
st Widget Name -> [Widget Name] -> [Widget Name]
forall a. a -> [a] -> [a]
: [Widget Name]
mainLayersMonochrome
        Mode
ViewMessage                  -> TabbedWindow ViewMessageWindowTab -> ChatState -> Widget Name
forall a.
(Eq a, Show a) =>
TabbedWindow a -> ChatState -> Widget Name
drawTabbedWindow TabbedWindow ViewMessageWindowTab
messageViewWindow ChatState
st Widget Name -> [Widget Name] -> [Widget Name]
forall a. a -> [a] -> [a]
: [Widget Name]
mainLayersMonochrome
        Mode
ManageAttachments            -> ChatState -> Widget Name
drawManageAttachments ChatState
st Widget Name -> [Widget Name] -> [Widget Name]
forall a. a -> [a] -> [a]
: [Widget Name]
mainLayersMonochrome
        Mode
ManageAttachmentsBrowseFiles -> ChatState -> Widget Name
drawManageAttachments ChatState
st Widget Name -> [Widget Name] -> [Widget Name]
forall a. a -> [a] -> [a]
: [Widget Name]
mainLayersMonochrome
        Mode
EditNotifyPrefs              -> ChatState -> Widget Name
drawNotifyPrefs ChatState
st Widget Name -> [Widget Name] -> [Widget Name]
forall a. a -> [a] -> [a]
: [Widget Name]
mainLayersMonochrome
        Mode
ChannelTopicWindow           -> ChatState -> Widget Name
drawChannelTopicWindow ChatState
st Widget Name -> [Widget Name] -> [Widget Name]
forall a. a -> [a] -> [a]
: [Widget Name]
mainLayersMonochrome
    where
        mainLayers :: [Widget Name]
mainLayers = Bool -> ChatState -> [Widget Name]
drawMain Bool
True ChatState
st
        mainLayersMonochrome :: [Widget Name]
mainLayersMonochrome = Bool -> ChatState -> [Widget Name]
drawMain Bool
False ChatState
st
        messageViewWindow :: TabbedWindow ViewMessageWindowTab
messageViewWindow = ChatState
stChatState
-> Getting
     (TabbedWindow ViewMessageWindowTab)
     ChatState
     (TabbedWindow ViewMessageWindowTab)
-> TabbedWindow ViewMessageWindowTab
forall s a. s -> Getting a s a -> a
^.(TeamState -> Const (TabbedWindow ViewMessageWindowTab) TeamState)
-> ChatState -> Const (TabbedWindow ViewMessageWindowTab) ChatState
Lens' ChatState TeamState
csCurrentTeam((TeamState -> Const (TabbedWindow ViewMessageWindowTab) TeamState)
 -> ChatState
 -> Const (TabbedWindow ViewMessageWindowTab) ChatState)
-> ((TabbedWindow ViewMessageWindowTab
     -> Const
          (TabbedWindow ViewMessageWindowTab)
          (TabbedWindow ViewMessageWindowTab))
    -> TeamState
    -> Const (TabbedWindow ViewMessageWindowTab) TeamState)
-> Getting
     (TabbedWindow ViewMessageWindowTab)
     ChatState
     (TabbedWindow ViewMessageWindowTab)
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(Maybe (Message, TabbedWindow ViewMessageWindowTab)
 -> Const
      (TabbedWindow ViewMessageWindowTab)
      (Maybe (Message, TabbedWindow ViewMessageWindowTab)))
-> TeamState -> Const (TabbedWindow ViewMessageWindowTab) TeamState
Lens'
  TeamState (Maybe (Message, TabbedWindow ViewMessageWindowTab))
tsViewedMessage((Maybe (Message, TabbedWindow ViewMessageWindowTab)
  -> Const
       (TabbedWindow ViewMessageWindowTab)
       (Maybe (Message, TabbedWindow ViewMessageWindowTab)))
 -> TeamState
 -> Const (TabbedWindow ViewMessageWindowTab) TeamState)
-> ((TabbedWindow ViewMessageWindowTab
     -> Const
          (TabbedWindow ViewMessageWindowTab)
          (TabbedWindow ViewMessageWindowTab))
    -> Maybe (Message, TabbedWindow ViewMessageWindowTab)
    -> Const
         (TabbedWindow ViewMessageWindowTab)
         (Maybe (Message, TabbedWindow ViewMessageWindowTab)))
-> (TabbedWindow ViewMessageWindowTab
    -> Const
         (TabbedWindow ViewMessageWindowTab)
         (TabbedWindow ViewMessageWindowTab))
-> TeamState
-> Const (TabbedWindow ViewMessageWindowTab) TeamState
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Traversal
  (Maybe (Message, TabbedWindow ViewMessageWindowTab))
  (Maybe (Message, TabbedWindow ViewMessageWindowTab))
  (Message, TabbedWindow ViewMessageWindowTab)
  (Message, TabbedWindow ViewMessageWindowTab)
-> Lens
     (Maybe (Message, TabbedWindow ViewMessageWindowTab))
     (Maybe (Message, TabbedWindow ViewMessageWindowTab))
     (Message, TabbedWindow ViewMessageWindowTab)
     (Message, TabbedWindow ViewMessageWindowTab)
forall s t a. HasCallStack => Traversal s t a a -> Lens s t a a
singular forall a a'. Traversal (Maybe a) (Maybe a') a a'
Traversal
  (Maybe (Message, TabbedWindow ViewMessageWindowTab))
  (Maybe (Message, TabbedWindow ViewMessageWindowTab))
  (Message, TabbedWindow ViewMessageWindowTab)
  (Message, TabbedWindow ViewMessageWindowTab)
_Just(((Message, TabbedWindow ViewMessageWindowTab)
  -> Const
       (TabbedWindow ViewMessageWindowTab)
       (Message, TabbedWindow ViewMessageWindowTab))
 -> Maybe (Message, TabbedWindow ViewMessageWindowTab)
 -> Const
      (TabbedWindow ViewMessageWindowTab)
      (Maybe (Message, TabbedWindow ViewMessageWindowTab)))
-> ((TabbedWindow ViewMessageWindowTab
     -> Const
          (TabbedWindow ViewMessageWindowTab)
          (TabbedWindow ViewMessageWindowTab))
    -> (Message, TabbedWindow ViewMessageWindowTab)
    -> Const
         (TabbedWindow ViewMessageWindowTab)
         (Message, TabbedWindow ViewMessageWindowTab))
-> (TabbedWindow ViewMessageWindowTab
    -> Const
         (TabbedWindow ViewMessageWindowTab)
         (TabbedWindow ViewMessageWindowTab))
-> Maybe (Message, TabbedWindow ViewMessageWindowTab)
-> Const
     (TabbedWindow ViewMessageWindowTab)
     (Maybe (Message, TabbedWindow ViewMessageWindowTab))
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(TabbedWindow ViewMessageWindowTab
 -> Const
      (TabbedWindow ViewMessageWindowTab)
      (TabbedWindow ViewMessageWindowTab))
-> (Message, TabbedWindow ViewMessageWindowTab)
-> Const
     (TabbedWindow ViewMessageWindowTab)
     (Message, TabbedWindow ViewMessageWindowTab)
forall s t a b. Field2 s t a b => Lens s t a b
_2