{-# LANGUAGE TemplateHaskell #-}

module Mensam.Client.UI.Brick.State where

import Mensam.API.Route.Api.User
import Mensam.Client.UI.Desks
import Mensam.Client.UI.Login
import Mensam.Client.UI.Menu
import Mensam.Client.UI.Register
import Mensam.Client.UI.Spaces

import Data.Kind
import Data.Text qualified as T
import Data.Time qualified as T
import Lens.Micro.Platform

type ClientScreenState :: Type
data ClientScreenState
  = ClientScreenStateLogin {ClientScreenState -> ScreenLoginState
_clientScreenStateLogin :: ScreenLoginState}
  | ClientScreenStateRegister {ClientScreenState -> ScreenRegisterState
_clientScreenStateRegister :: ScreenRegisterState}
  | ClientScreenStateSpaces {ClientScreenState -> ScreenSpacesState
_clientScreenStateSpaces :: ScreenSpacesState}
  | ClientScreenStateDesks {ClientScreenState -> ScreenDesksState
_clientScreenStateDesks :: ScreenDesksState}
  | ClientScreenStateMenu {ClientScreenState -> ScreenMenuState
_clientScreenStateMenu :: ScreenMenuState}
makeLenses ''ClientScreenState

type ClientState :: Type
data ClientState = MkClientState
  { ClientState -> ClientScreenState
_clientStateScreenState :: ClientScreenState
  , ClientState -> Maybe Text
_clientStatePopup :: Maybe T.Text
  , ClientState -> Maybe Jwt
_clientStateJwt :: Maybe Jwt
  , ClientState -> TimeZone
_clientStateTimezone :: T.TimeZone
  }
makeLenses ''ClientState