using System.Collections.Generic;
using UnityEngine;

namespace IndianOceanAssets.Engine2_5D
{
    /// <summary>
    /// 敌人管理器 —— 在游戏开始时，于场景中所有 EnemySpawnPoint 处生成敌人。
    ///
    /// 用法：
    /// 1. 在场景中放置空物体，挂 EnemySpawnPoint 组件，作为出生点
    /// 2. 在场景中创建空物体，挂此 EnemyManager 脚本
    /// 3. 把敌人预制体拖到 enemyPrefab 字段
    /// 4. 运行时自动在所有出生点生成敌人
    /// </summary>
    public class EnemyManager : MonoBehaviour
    {
        public static EnemyManager Instance { get; private set; }

        [Header("敌人物体预制体")]
        [SerializeField] private GameObject enemyPrefab;

        [Tooltip("勾选后游戏开始时自动在所有出生点生成敌人")]
        [SerializeField] private bool spawnOnStart = true;

        private readonly List<EnemyAI> _enemies = new List<EnemyAI>();

        private void Awake()
        {
            if (Instance != null && Instance != this)
            {
                Destroy(this);
                return;
            }
            Instance = this;
        }

        private void Start()
        {
            if (spawnOnStart)
                SpawnAll();
        }

        /// <summary>
        /// 在所有 EnemySpawnPoint 处生成敌人
        /// </summary>
        [ContextMenu("Spawn All")]
        public void SpawnAll()
        {
            var spawnPoints = FindObjectsByType<EnemySpawnPoint>(FindObjectsSortMode.None);
            foreach (var sp in spawnPoints)
            {
                SpawnEnemy(sp.transform.position, sp.transform.rotation);
            }
            Debug.Log($"[EnemyManager] 在 {spawnPoints.Length} 个出生点生成了 {_enemies.Count} 个敌人");
        }

        /// <summary>
        /// 在指定位置生成一个敌人
        /// </summary>
        public GameObject SpawnEnemy(Vector3 position, Quaternion rotation)
        {
            if (enemyPrefab == null)
            {
                Debug.LogWarning("[EnemyManager] enemyPrefab 未设置！");
                return null;
            }

            var enemy = Instantiate(enemyPrefab, position, rotation);
            var ai = enemy.GetComponent<EnemyAI>();
            if (ai != null && !_enemies.Contains(ai))
                _enemies.Add(ai);

            return enemy;
        }

        /// <summary>
        /// 获取所有活跃敌人（自动清理已销毁的）
        /// </summary>
        public List<EnemyAI> GetActiveEnemies()
        {
            _enemies.RemoveAll(e => e == null);
            return _enemies;
        }
    }
}
