-- | Personal game configuration file type definitions.
module Game.LambdaHack.Server.Config
  ( Config(..)
  ) where

import Control.DeepSeq
import Data.Binary
import Data.Text (Text)

import Game.LambdaHack.Server.Fov

-- | Fully typed contents of the rules config file. This config
-- is a part of the game server.
data Config = Config
  { configSelfString     :: !String
    -- engine
  , configFirstDeathEnds :: !Bool
  , configFovMode        :: !FovMode
  , configSaveBkpClips   :: !Int
    -- files
  , configAppDataDir     :: !FilePath
  , configScoresFile     :: !FilePath
  , configRulesCfgFile   :: !FilePath
  , configSavePrefix     :: !String
    -- heroNames
  , configHeroNames      :: ![(Int, Text)]
  }
  deriving Show

instance NFData Config

instance Binary Config where
  put Config{..} = do
    put configSelfString
    put configFirstDeathEnds
    put configFovMode
    put configSaveBkpClips
    put configAppDataDir
    put configScoresFile
    put configRulesCfgFile
    put configSavePrefix
    put configHeroNames
  get = do
    configSelfString     <- get
    configFirstDeathEnds <- get
    configFovMode        <- get
    configSaveBkpClips <- get
    configAppDataDir     <- get
    configScoresFile     <- get
    configRulesCfgFile   <- get
    configSavePrefix <- get
    configHeroNames      <- get
    return Config{..}