module Rattletrap.AttributeValue.Pickup where

import Rattletrap.Word32

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

data PickupAttributeValue = PickupAttributeValue
  { pickupAttributeValueInstigatorId :: Maybe Word32
  , pickupAttributeValuePickedUp :: Bool
  } deriving (Eq, Ord, Show)

getPickupAttributeValue :: BinaryBit.BitGet PickupAttributeValue
getPickupAttributeValue = do
  instigator <- BinaryBit.getBool
  maybeInstigatorId <-
    if instigator
      then do
        instigatorId <- getWord32Bits
        pure (Just instigatorId)
      else pure Nothing
  pickedUp <- BinaryBit.getBool
  pure (PickupAttributeValue maybeInstigatorId pickedUp)

putPickupAttributeValue :: PickupAttributeValue -> BinaryBit.BitPut ()
putPickupAttributeValue pickupAttributeValue = do
  case pickupAttributeValueInstigatorId pickupAttributeValue of
    Nothing -> BinaryBit.putBool False
    Just instigatorId -> do
      BinaryBit.putBool True
      putWord32Bits instigatorId
  BinaryBit.putBool (pickupAttributeValuePickedUp pickupAttributeValue)