module Rattletrap.AttributeValue.TeamPaint where

import Rattletrap.Word32
import Rattletrap.Word8

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

data TeamPaintAttributeValue = TeamPaintAttributeValue
  { teamPaintAttributeValueTeam :: Word8
  , teamPaintAttributeValuePrimaryColor :: Word8
  , teamPaintAttributeValueAccentColor :: Word8
  , teamPaintAttributeValuePrimaryFinish :: Word32
  , teamPaintAttributeValueAccentFinish :: Word32
  } deriving (Eq, Ord, Show)

getTeamPaintAttributeValue :: BinaryBit.BitGet TeamPaintAttributeValue
getTeamPaintAttributeValue = do
  team <- getWord8Bits
  primaryColor <- getWord8Bits
  accentColor <- getWord8Bits
  primaryFinish <- getWord32Bits
  accentFinish <- getWord32Bits
  pure
    (TeamPaintAttributeValue
       team
       primaryColor
       accentColor
       primaryFinish
       accentFinish)

putTeamPaintAttributeValue :: TeamPaintAttributeValue -> BinaryBit.BitPut ()
putTeamPaintAttributeValue teamPaintAttributeValue = do
  putWord8Bits (teamPaintAttributeValueTeam teamPaintAttributeValue)
  putWord8Bits (teamPaintAttributeValuePrimaryColor teamPaintAttributeValue)
  putWord8Bits (teamPaintAttributeValueAccentColor teamPaintAttributeValue)
  putWord32Bits (teamPaintAttributeValuePrimaryFinish teamPaintAttributeValue)
  putWord32Bits (teamPaintAttributeValueAccentFinish teamPaintAttributeValue)