using Godot;
using Mr.BrickAdventures.Autoloads;
using Mr.BrickAdventures.scripts.Resources;

namespace Mr.BrickAdventures.scripts.Events;

/// <summary>
/// Handles skill collection events and unlocks skills via GameStateStore.
/// Skills are immediately activated but only persisted on level complete.
/// </summary>
public partial class SkillCollectHandler : Node
{
    private SkillManager SkillManager => SkillManager.Instance;

    public override void _Ready()
    {
        EventBus.Instance.SkillCollected += OnSkillCollected;
    }

    public override void _ExitTree()
    {
        if (EventBus.Instance != null)
        {
            EventBus.Instance.SkillCollected -= OnSkillCollected;
        }
    }

    private void OnSkillCollected(SkillData skill, Vector2 position)
    {
        if (skill == null) return;

        // Unlock in session (will be committed on level complete, lost on death)
        GameStateStore.Instance?.UnlockSkillInSession(skill);

        // Immediately activate the skill for the player
        SkillManager?.AddSkill(skill);

        // Emit skill unlocked event for UI/achievements
        EventBus.EmitSkillUnlocked(skill.Name, skill.Level);
    }
}
