{-# Language CPP, OverloadedStrings #-}
{-|
Module      : Client.View.RtsStats
Description : View current GHC RTS statistics
Copyright   : (c) Eric Mertens, 2017
License     : ISC
Maintainer  : emertens@gmail.com

Lines for the @/rtsstats@ command. This module depends
on GHC 8.2.1 API.

-}

module Client.View.RtsStats
  ( rtsStatsLines
  ) where

import           Client.Image.PackedImage
import           Client.Image.Palette
import           Control.Lens
import           Data.Semigroup
import           Graphics.Vty.Attributes
import           RtsStats

-- | Generate lines used for @/rtsstats@.
rtsStatsLines :: Maybe Stats -> Palette -> [Image']
rtsStatsLines Nothing pal = [text' (view palError pal) "Statistics not available"]
rtsStatsLines (Just stats) pal
  | null entries = [text' (view palError pal) "Statistics empty"]
  | otherwise    = zipWith (\v l -> padV wv v <> " " <> l) valueImages labelImages
  where
    entries     = statsToEntries stats
    labelImages = map (text' (view palLabel pal) . fst) entries
    valueImages = map (text' defAttr . snd) entries
    wv          = maximum (0 : map imageWidth valueImages)
    padV n img  = string defAttr (replicate (n - imageWidth img) ' ') <> img