module Rattletrap.AttributeValue.UniqueId where

import Rattletrap.RemoteId
import Rattletrap.Word8

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

data UniqueIdAttributeValue = UniqueIdAttributeValue
  { uniqueIdAttributeValueSystemId :: Word8
  , uniqueIdAttributeValueRemoteId :: RemoteId
  , uniqueIdAttributeValueLocalId :: Word8
  } deriving (Eq, Ord, Show)

getUniqueIdAttributeValue :: BinaryBit.BitGet UniqueIdAttributeValue
getUniqueIdAttributeValue = do
  systemId <- getWord8Bits
  remoteId <- getRemoteId systemId
  localId <- getWord8Bits
  pure (UniqueIdAttributeValue systemId remoteId localId)

putUniqueIdAttributeValue :: UniqueIdAttributeValue -> BinaryBit.BitPut ()
putUniqueIdAttributeValue uniqueIdAttributeValue = do
  putWord8Bits (uniqueIdAttributeValueSystemId uniqueIdAttributeValue)
  putRemoteId (uniqueIdAttributeValueRemoteId uniqueIdAttributeValue)
  putWord8Bits (uniqueIdAttributeValueLocalId uniqueIdAttributeValue)