using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;
using Shooter.UI;

namespace Shooter.Gameplay
{
    /// <summary>
    /// Сценарий первого уровня: запускает бой с боссом, отслеживает его гибель (убирает
    /// рамку боя и полоску здоровья) и завершает уровень переходом на финальную сцену.
    /// </summary>
    public class Level_1 : MonoBehaviour
    {
        [Header("Босс")]
        public GameObject m_BossObject;
        public GameObject m_BossBlock1;
        public GameObject m_BossBlockBack1;
        public EnemySpawnPoint[] m_BossSpawnPoints;

        [HideInInspector] public bool m_KilledBoss = false;
        private DamageControl m_BossDamage;

        void Start()
        {
            m_BossDamage = m_BossObject.GetComponent<DamageControl>();
            m_BossBlockBack1.SetActive(false);
        }

        void Update()
        {
            // Следим за гибелью босса.
            if (!m_KilledBoss && m_BossDamage.IsDead)
            {
                m_KilledBoss = true;
                CameraControl.m_Current.m_BossTarget = null;
                m_BossBlock1.SetActive(false);
                CameraControl.m_Current.m_BackBlock.gameObject.SetActive(true);
            }
        }

        public void StartBossFight()
        {
            CameraControl.m_Current.m_BossTarget = m_BossObject.transform;
            m_BossObject.GetComponent<Enemy>().EnableEnemy();
            m_BossBlockBack1.SetActive(true);
            UI_HUD.m_Main.ShowBossHealth();
            CameraControl.m_Current.m_BackBlock.gameObject.SetActive(false);
            StartCoroutine(Co_SpawnSmallEnemies());
        }

        IEnumerator Co_SpawnSmallEnemies()
        {
            yield return new WaitForSeconds(6);

            int num = 0;
            for (int i = 0; i < 10; i++)
            {
                m_BossSpawnPoints[num].SpawnEnemy();
                num = (num == 0) ? 1 : 0;
                yield return new WaitForSeconds(5);
            }
        }

        public void EndLevel()
        {
            StartCoroutine(Co_EndLevel());
        }

        IEnumerator Co_EndLevel()
        {
            GameControl.m_Current.m_MainSaveData.m_CheckpointNumber = 0;
            GameControl.m_Current.m_MainSaveData.Save();
            yield return new WaitForSeconds(1);
            FadeControl.m_Current.StartFadeOut();
            yield return new WaitForSeconds(2);
            SceneManager.LoadScene("EndScene");
        }
    }
}
