module Rattletrap.Encode.RemoteId
  ( putRemoteId
  ) where

import Rattletrap.Encode.Bitstream
import Rattletrap.Encode.Word64le
import Rattletrap.Type.RemoteId
import Rattletrap.Utility.Bytes

import qualified Data.Binary.Bits.Put as BinaryBits
import qualified Data.ByteString.Lazy as LazyBytes

putRemoteId :: RemoteId -> BinaryBits.BitPut ()
putRemoteId remoteId = case remoteId of
  RemoteIdPlayStation name bytes -> do
    let
      rawName = LazyBytes.toStrict
        (reverseBytes (padBytes (16 :: Int) (encodeLatin1 name)))
    BinaryBits.putByteString rawName
    BinaryBits.putByteString (LazyBytes.toStrict (LazyBytes.pack bytes))
  RemoteIdSplitscreen word24 -> BinaryBits.putWord32be 24 word24
  RemoteIdSteam word64 -> putWord64Bits word64
  RemoteIdSwitch x -> putBitstream x
  RemoteIdXbox word64 -> putWord64Bits word64