module IO.Config.Layout where

import ClassyPrelude

import Data.Ini.Config

import IO.Config.Parser (noEmpty, parseText)

data Config = Config
    { columnWidth          :: Int
    , columnPadding        :: Int
    , descriptionIndicator :: Text
    }

defaultConfig :: Config
defaultConfig = Config {columnWidth = 30, columnPadding = 3, descriptionIndicator = "≡"}

parser :: IniParser Config
parser =
    fromMaybe defaultConfig <$>
    sectionMb
        "layout"
        (do columnWidthCf <-
                fromMaybe (columnWidth defaultConfig) <$> fieldMbOf "column_width" number
            columnPaddingCf <-
                fromMaybe (columnPadding defaultConfig) <$> fieldMbOf "column_padding" number
            descriptionIndicatorCf <-
                fromMaybe (descriptionIndicator defaultConfig) . (noEmpty . parseText =<<) <$>
                fieldMb "description_indicator"
            pure
                Config
                { columnWidth = columnWidthCf
                , columnPadding = columnPaddingCf
                , descriptionIndicator = descriptionIndicatorCf
                })