using UnityEngine;

namespace Shooter.Gameplay
{
    /// <summary>
    /// Чекпойнт: активируется, когда игрок подходит ближе <see cref="m_ActivateDistance"/>.
    /// Переключает визуал (<see cref="m_Bases"/>) и сообщает прогресс в <see cref="GameControl"/>.
    /// </summary>
    public class Checkpoint : MonoBehaviour
    {
        [Tooltip("Порядковый номер чекпойнта")]
        public int m_CheckpointNumber = 0;
        [Tooltip("Точка респавна игрока на этом чекпойнте")]
        public Transform m_SpawnPoint;
        [Tooltip("Дистанция активации")]
        public float m_ActivateDistance = 6f;

        [Tooltip("Визуалы: [0] — выключенный, [1] — включённый")]
        public GameObject[] m_Bases;
        public GameObject m_ActivateParticle;

        [HideInInspector] public bool m_IsActivated = false;

        void Update()
        {
            if (!m_IsActivated &&
                Vector3.Distance(PlayerChar.m_Current.transform.position, transform.position) <= m_ActivateDistance)
            {
                Activate();
            }
        }

        public void Activate()
        {
            if (m_IsActivated)
                return;

            m_IsActivated = true;
            m_Bases[0].SetActive(false);
            m_Bases[1].SetActive(true);
            GameControl.m_Current.HandleCheckpoint(m_CheckpointNumber);

            GameObject obj = Instantiate(m_ActivateParticle);
            obj.transform.position = transform.position + new Vector3(0, .3f, 0);
            Destroy(obj, 3);
        }
    }
}
