using JoshH.UI;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

public class CharacterHealthBar : MonoBehaviour
{
    [SerializeField] Slider _slider;
    [SerializeField] TMP_Text _text;
    [SerializeField] UIGradient _gradient;
    private Battler _battler;

    void Awake()
    {
        _battler = GetComponentInParent<Battler>();
        _battler.HealthChanged += HandleHealthChanged;
        _battler.PlayerChanged += ShowForPlayer;
        HandleHealthChanged(_battler.MaxHealth, 0);
    }

    public void ShowForPlayer(PlayerData playerData)
    {
        HandleHealthChanged(playerData.Health, 0);
        _gradient.LinearColor1 = playerData.Color1;
        _gradient.LinearColor2 = playerData.Color2;
    }

    void HandleHealthChanged(int health, int change)
    {
	    _slider.maxValue = _battler.MaxHealth;
	    _slider.value = health;
	    string healthText = health <= 0 ? "DEAD" : $"{health} / {_battler.MaxHealth}";

        _text.SetText(healthText);
    }

    void OnValidate()
    {
        _slider = GetComponent<Slider>();
        _text = GetComponentInChildren<TMP_Text>();
        _gradient = GetComponentInChildren<UIGradient>();
    }
}