using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;

/// <summary>
/// Manages the Heads-Up Display (HUD) elements and customization.
/// </summary>
public class HUD : MonoBehaviour
{
    [Header("HUD Elements")]

    // UI Elements for player stats
    public TextMeshPro fireRateValue; // Display for fire rate
    public TextMeshPro movementSpeedValue; // Display for movement speed
    public TextMeshPro bulletDamageValue; // Display for bullet damage
    public TextMeshPro moneyValue; // Display for money
    public TextMeshPro shieldValue; // Display for shield health

    public GameObject[] HUDElements; // Array of HUD elements

    [Header("HUD Customization")]

    // HUD Color
    public static Color HUDColor; // Color for HUD elements

    public static HUD instance; // Singleton instance reference

    private void Awake()
    {
        instance = this; // Set the singleton instance reference
    }

    private void Start()
    {
        // Set the color for HUD elements
        foreach (GameObject element in HUDElements)
        {
            SpriteRenderer spriteRenderer = element.GetComponent<SpriteRenderer>();
            if (spriteRenderer != null)
            {
                HUDColor.a = 1f; // Ensure alpha value is set
                spriteRenderer.color = HUDColor; // Apply HUD color to sprite renderer
            }

            TextMeshPro textMeshPro = element.GetComponentInChildren<TextMeshPro>();
            if (textMeshPro != null)
            {
                textMeshPro.color = HUDColor; // Apply HUD color to TextMeshPro component
            }
        }

        // Display player stats on-screen
        fireRateValue.text = gameObject.GetComponent<Weapon>().shootCooldown.ToString("F2");
        bulletDamageValue.text = gameObject.GetComponent<Weapon>().bulletDamage.ToString();
        movementSpeedValue.text = gameObject.GetComponent<PlayerController>().maxSpeed.ToString();
        shieldValue.text = gameObject.GetComponentInChildren<Shield>().maxShieldHealth.ToString();
    }

    private void Update()
    {
        moneyValue.text = "$" + ScoreManager.instance.score.ToString(); // Update money display
    }
}
