module Rattletrap.AttributeValue.PrivateMatchSettings where

import Rattletrap.Text
import Rattletrap.Word32

import qualified Data.Binary.Bits.Get as BinaryBit
import qualified Data.Binary.Bits.Put as BinaryBit

data PrivateMatchSettingsAttributeValue = PrivateMatchSettingsAttributeValue
  { privateMatchSettingsAttributeValueMutators :: Text
  , privateMatchSettingsAttributeValueJoinableBy :: Word32
  , privateMatchSettingsAttributeValueMaxPlayers :: Word32
  , privateMatchSettingsAttributeValueGameName :: Text
  , privateMatchSettingsAttributeValuePassword :: Text
  , privateMatchSettingsAttributeValueFlag :: Bool
  } deriving (Eq, Ord, Show)

getPrivateMatchSettingsAttributeValue :: BinaryBit.BitGet PrivateMatchSettingsAttributeValue
getPrivateMatchSettingsAttributeValue = do
  mutators <- getTextBits
  joinableBy <- getWord32Bits
  maxPlayers <- getWord32Bits
  gameName <- getTextBits
  password <- getTextBits
  flag <- BinaryBit.getBool
  pure
    (PrivateMatchSettingsAttributeValue
       mutators
       joinableBy
       maxPlayers
       gameName
       password
       flag)

putPrivateMatchSettingsAttributeValue :: PrivateMatchSettingsAttributeValue
                                      -> BinaryBit.BitPut ()
putPrivateMatchSettingsAttributeValue privateMatchSettingsAttributeValue = do
  putTextBits
    (privateMatchSettingsAttributeValueMutators
       privateMatchSettingsAttributeValue)
  putWord32Bits
    (privateMatchSettingsAttributeValueJoinableBy
       privateMatchSettingsAttributeValue)
  putWord32Bits
    (privateMatchSettingsAttributeValueMaxPlayers
       privateMatchSettingsAttributeValue)
  putTextBits
    (privateMatchSettingsAttributeValueGameName
       privateMatchSettingsAttributeValue)
  putTextBits
    (privateMatchSettingsAttributeValuePassword
       privateMatchSettingsAttributeValue)
  BinaryBit.putBool
    (privateMatchSettingsAttributeValueFlag privateMatchSettingsAttributeValue)