using System.Xml.Serialization;
using UnityEngine;

public class CanonPlacementManager : MonoBehaviour
{
    public static CanonPlacementManager instance;

    [Tooltip("How many canons are allowed per level")]
    public int allowedCanonCount = 2; // Now editable via Inspector

    private int currentCanonCount = 0;

    [Header("Assign the blinking arrows manually")]
    public GameObject[] blinkingArrows;

    void Awake()
    {
        instance = this;
    }

    public void DecrementCanonCount()
    {
        currentCanonCount--;
    }

    //public bool CanPlaceCanon()
    //{
    //    return currentCanonCount < allowedCanonCount && !gameManager.gameStarted;
    //}

    public int GetCanonCount()
    {
        return currentCanonCount;
    }

    public void CanonPlaced(GameObject canonInstance)
    {
        currentCanonCount++;
        // Enable firing if CanonController is attached
        CanonController controller = canonInstance.GetComponent<CanonController>();
        if (controller != null)
        {
            controller.canFire = true;
        }
        else
        {
            Debug.LogWarning("CanonPlaced: Missing CanonController on canonInstance");
        }
        // Start enemy spawn only once
        if (currentCanonCount == 2)
        {
            Debug.Log("Spawning Enemies");
            //EnemySpawner.instance?.StartSpawningEnemies();
        }

        if (currentCanonCount >= allowedCanonCount)
        {
            foreach (GameObject arrow in blinkingArrows)
            {
                arrow.SetActive(false);
            }
        }

        Debug.Log("Placed Cannon " + currentCanonCount);
    }

    public void ResetCanonCount()
    {
        currentCanonCount = 0;
        foreach (GameObject arrow in blinkingArrows)
        {
            ArrowBlinker blinker = arrow.GetComponent<ArrowBlinker>();
            if (blinker != null)
                blinker.StopBlinking();
        }
    }

    public void StartCanonFire()
    {
        CanonController[] canons = FindObjectsByType<CanonController>(FindObjectsInactive.Exclude, FindObjectsSortMode.None);

        foreach (CanonController canon in canons)
        {
            canon.canFire = true;
        }
    }

    public void StopCanonFire()
    {
        CanonController[] canons = FindObjectsByType<CanonController>(FindObjectsInactive.Exclude, FindObjectsSortMode.None);

        foreach (CanonController canon in canons)
        {
            canon.canFire = false;
        }
    }
}