package types

import (
	"encoding/binary"
	"io"
)

// EquipmentItem represents an equipment item with model and color information
// Matches EQ2_EquipmentItem from C++ code
type EquipmentItem struct {
	Type      uint16 // Model/item type ID
	Color     Color  // RGB color for the item (3 bytes)
	Highlight Color  // RGB highlight color for the item (3 bytes)
}

// Serialize writes the equipment item to a writer
func (e *EquipmentItem) Serialize(w io.Writer) error {
	if err := binary.Write(w, binary.LittleEndian, e.Type); err != nil {
		return err
	}
	if err := e.Color.Serialize(w); err != nil {
		return err
	}
	return e.Highlight.Serialize(w)
}

// SerializeToBytes writes the equipment item to a byte slice at the given offset
func (e *EquipmentItem) SerializeToBytes(dest []byte, offset *uint32) {
	binary.LittleEndian.PutUint16(dest[*offset:], e.Type)
	*offset += 2
	e.Color.SerializeToBytes(dest, offset)
	e.Highlight.SerializeToBytes(dest, offset)
}

// Size returns the serialized size of the equipment item
func (e *EquipmentItem) Size() uint32 {
	return 2 + e.Color.Size() + e.Highlight.Size() // 2 bytes for type + 3 bytes color + 3 bytes highlight = 8 bytes total
}

// Deserialize reads an equipment item from a reader
func (e *EquipmentItem) Deserialize(r io.Reader) error {
	if err := binary.Read(r, binary.LittleEndian, &e.Type); err != nil {
		return err
	}
	if err := e.Color.Deserialize(r); err != nil {
		return err
	}
	return e.Highlight.Deserialize(r)
}