{-# 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.SaveAttachmentWindow
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
        SaveAttachmentWindow LinkChoice
_       -> ChatState -> Widget Name
drawSaveAttachmentWindow 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