{-# LANGUAGE TemplateHaskell #-}

-- |
-- SPDX-License-Identifier: BSD-3-Clause
module Swarm.TUI.View.Robot.Type where

import Brick.Focus (FocusRing)
import Brick.Widgets.List qualified as BL
import Brick.Widgets.TabularList.Grid
import Control.Lens hiding (Const, from, (<.>))
import Data.Sequence (Seq)
import Swarm.Game.Robot
import Swarm.Language.Syntax (Const)
import Swarm.Log
import Swarm.TUI.Model.Name

data RobotDetailsPaneState = RobotDetailsPaneState
  { RobotDetailsPaneState -> FocusRing Name
_detailFocus :: FocusRing Name
  , RobotDetailsPaneState -> GenericList Name Seq LogEntry
_logsList :: BL.GenericList Name Seq LogEntry
  , RobotDetailsPaneState -> List Name (Const, Int)
_cmdHistogramList :: BL.List Name (Const, Int)
  }

makeLenses ''RobotDetailsPaneState

data RobotDisplay = RobotDisplay
  { RobotDisplay -> Bool
_isDetailsOpened :: Bool
  , RobotDisplay -> GridTabularList Name Int
_robotsGridList :: GridTabularList Name RID
  , RobotDisplay -> RobotDetailsPaneState
_robotDetailsPaneState :: RobotDetailsPaneState
  }

makeLenses ''RobotDisplay