package player

import (
	"eq2emu/internal/skills"
)

// GetSkillByName returns a skill by name
func (p *Player) GetSkillByName(name string, checkUpdate bool) *skills.Skill {
	return p.skillList.GetSkillByName(name, checkUpdate)
}

// GetSkillByID returns a skill by ID
func (p *Player) GetSkillByID(skillID int32, checkUpdate bool) *skills.Skill {
	return p.skillList.GetSkillByID(skillID, checkUpdate)
}

// AddSkill adds a skill to the player
func (p *Player) AddSkill(skillID int32, currentVal, maxVal int16, saveNeeded bool) {
	p.skillList.AddSkill(skillID, currentVal, maxVal, saveNeeded)
}

// RemovePlayerSkill removes a skill from the player
func (p *Player) RemovePlayerSkill(skillID int32, save bool) {
	p.skillList.RemoveSkill(skillID)
	if save {
		// TODO: Remove from database
		p.RemoveSkillFromDB(p.skillList.GetSkillByID(skillID, false), save)
	}
}

// RemoveSkillFromDB removes a skill from the database
func (p *Player) RemoveSkillFromDB(skill *skills.Skill, save bool) {
	if skill == nil {
		return
	}
	// TODO: Remove skill from database
}

// AddSkillBonus adds a skill bonus from a spell
func (p *Player) AddSkillBonus(spellID, skillID int32, value float32) {
	// Check if we already have this bonus
	bonus := p.GetSkillBonus(spellID)
	if bonus != nil {
		// Update existing bonus
		bonus.SkillID = skillID
		bonus.Value = value
	} else {
		// Add new bonus
		bonus = &SkillBonus{
			SpellID: spellID,
			SkillID: skillID,
			Value:   value,
		}
		// TODO: Add to skill bonus list
	}

	// Apply the bonus to the skill
	skill := p.GetSkillByID(skillID, false)
	if skill != nil {
		// TODO: Apply bonus to skill value
	}
}

// GetSkillBonus returns a skill bonus by spell ID
func (p *Player) GetSkillBonus(spellID int32) *SkillBonus {
	// TODO: Look up skill bonus by spell ID
	return nil
}

// RemoveSkillBonus removes a skill bonus
func (p *Player) RemoveSkillBonus(spellID int32) {
	bonus := p.GetSkillBonus(spellID)
	if bonus == nil {
		return
	}

	// Remove the bonus from the skill
	skill := p.GetSkillByID(bonus.SkillID, false)
	if skill != nil {
		// TODO: Remove bonus from skill value
	}

	// TODO: Remove from skill bonus list
}
