package main

import (
	"errors"
)

// Packet 定义网络包结构
type Packet struct {
	CmdMain byte
	CmdSub  byte
	Data    []byte
}

// EncodePacket 将Packet编码为字节流
func EncodePacket(pkt Packet) []byte {
	if len(pkt.Data) == 0 {
		return []byte{pkt.CmdMain, pkt.CmdSub}
	}

	buf := make([]byte, 2+len(pkt.Data))
	buf[0] = pkt.CmdMain
	buf[1] = pkt.CmdSub
	copy(buf[2:], pkt.Data)
	return buf
}

// DecodePacket 从字节流解析Packet
func DecodePacket(data []byte) (Packet, error) {
	if len(data) < 2 {
		return Packet{}, errors.New("invalid packet: too short")
	}

	pkt := Packet{
		CmdMain: data[0],
		CmdSub:  data[1],
	}

	if len(data) > 2 {
		pkt.Data = data[2:]
	}

	return pkt, nil
}
