module Rattletrap.Decode.ReservationAttribute
  ( decodeReservationAttributeBits
  ) where

import Rattletrap.Decode.Common
import Rattletrap.Decode.CompressedWord
import Rattletrap.Decode.Str
import Rattletrap.Decode.UniqueIdAttribute
import Rattletrap.Type.ReservationAttribute
import Rattletrap.Type.UniqueIdAttribute
import Rattletrap.Type.Word8le

decodeReservationAttributeBits
  :: (Int, Int, Int) -> DecodeBits ReservationAttribute
decodeReservationAttributeBits version = do
  number <- decodeCompressedWordBits 7
  uniqueId <- decodeUniqueIdAttributeBits version
  ReservationAttribute number uniqueId
    <$> decodeWhen
          (uniqueIdAttributeSystemId uniqueId /= Word8le 0)
          decodeStrBits
    <*> getBool
    <*> getBool
    <*> decodeWhen (version >= (868, 12, 0)) (getWord8Bits 6)