package appearances

// Appearance represents a single appearance with ID, name, and client version requirements
type Appearance struct {
	id        int32  // Appearance ID
	name      string // Appearance name
	minClient int16  // Minimum client version required
}

// NewAppearance creates a new appearance with the given parameters
func NewAppearance(id int32, name string, minClientVersion int16) *Appearance {
	if len(name) == 0 {
		return nil
	}

	return &Appearance{
		id:        id,
		name:      name,
		minClient: minClientVersion,
	}
}

// GetID returns the appearance ID
func (a *Appearance) GetID() int32 {
	return a.id
}

// GetName returns the appearance name
func (a *Appearance) GetName() string {
	return a.name
}

// GetMinClientVersion returns the minimum client version required
func (a *Appearance) GetMinClientVersion() int16 {
	return a.minClient
}

// GetNameString returns the name as a string (alias for GetName for C++ compatibility)
func (a *Appearance) GetNameString() string {
	return a.name
}

// SetName sets the appearance name
func (a *Appearance) SetName(name string) {
	a.name = name
}

// SetMinClientVersion sets the minimum client version
func (a *Appearance) SetMinClientVersion(version int16) {
	a.minClient = version
}

// IsCompatibleWithClient returns true if the appearance is compatible with the given client version
func (a *Appearance) IsCompatibleWithClient(clientVersion int16) bool {
	return clientVersion >= a.minClient
}

// Clone creates a copy of the appearance
func (a *Appearance) Clone() *Appearance {
	return &Appearance{
		id:        a.id,
		name:      a.name,
		minClient: a.minClient,
	}
}
