{-# Language BangPatterns #-}
{-|
Module      : Client.View
Description : View selection module
Copyright   : (c) Eric Mertens, 2016
License     : ISC
Maintainer  : emertens@gmail.com

This module selects the correct view based on the current state.

-}
module Client.View
  ( viewLines
  ) where

import           Client.State
import           Client.State.Focus
import           Client.View.ChannelInfo
import           Client.View.Digraphs
import           Client.View.Help
import           Client.View.MaskList
import           Client.View.Mentions
import           Client.View.Messages
import           Client.View.Palette
import           Client.View.UrlSelection
import           Client.View.UserList
import           Client.View.Windows
import           Control.Lens
import           Graphics.Vty.Image

viewLines :: Focus -> Subfocus -> ClientState -> [Image]
viewLines focus subfocus !st =
  case (focus, subfocus) of
    _ | Just ("url",arg) <- clientActiveCommand st ->
      urlSelectionView focus arg st
    (ChannelFocus network channel, FocusInfo) ->
      channelInfoImages network channel st
    (ChannelFocus network channel, FocusUsers)
      | view clientDetailView st -> userInfoImages network channel st
      | otherwise                -> userListImages network channel st
    (ChannelFocus network channel, FocusMasks mode) ->
      maskListImages mode network channel st
    (_, FocusWindows filt) -> windowsImages filt st
    (_, FocusMentions) -> mentionsViewLines st
    (_, FocusPalette) -> paletteViewLines pal
    (_, FocusDigraphs) -> digraphLines st
    (_, FocusHelp mb) -> helpImageLines mb pal
    _ -> chatMessageImages focus st
  where
    pal = clientPalette st