using System.Collections;
using UnityEngine;

namespace Shooter.Gameplay
{
    /// <summary>
    /// Подбираемый бонус-способность. При касании игроком срабатывает и запускает
    /// эффект (сейчас единственный — «кольцо пуль» во все стороны).
    /// </summary>
    public class PowerUp : MonoBehaviour
    {
        [Tooltip("Номер способности (0 — кольцо пуль)")]
        public int m_PowerNum = 0;

        [Header("Кольцо пуль (способность 0)")]
        [Tooltip("Сколько пуль выпустить")]
        public int m_RingBulletCount = 40;
        [Tooltip("Угол между пулями, градусы (40 пуль × 12° обходят круг с нахлёстом)")]
        public float m_RingAngleStep = 12f;
        [Tooltip("Задержка между пулями, сек")]
        public float m_RingFireDelay = .01f;

        [Header("Ссылки")]
        public GameObject m_BulletPrefab1;
        public GameObject m_ParticlePrefab1;
        public GameObject m_DisablingPart;

        [HideInInspector] public bool m_Picked = false;

        void OnTriggerEnter(Collider coll)
        {
            if (m_Picked || coll.gameObject.tag != "Player")
                return;

            GameObject obj = Instantiate(m_ParticlePrefab1);
            obj.transform.position = transform.position;
            Destroy(obj, 3);

            m_Picked = true;
            GetComponent<Collider>().enabled = false;
            m_DisablingPart.SetActive(false);
            ApplyPower();
        }

        public void ApplyPower()
        {
            switch (m_PowerNum)
            {
                case 0:
                    StartCoroutine(Co_FireRingBullets());
                    break;
            }
        }

        /// <summary>Выпускает кольцо пуль во все стороны, затем удаляет бонус.</summary>
        IEnumerator Co_FireRingBullets()
        {
            for (int i = 0; i < m_RingBulletCount; i++)
            {
                GameObject bullet = Instantiate(m_BulletPrefab1);
                bullet.transform.position = transform.position;
                bullet.transform.forward = Quaternion.Euler(0, i * m_RingAngleStep, 0) * Vector3.forward;
                bullet.GetComponent<ProjectileCollision>().m_Creator = PlayerChar.m_Current.gameObject;
                yield return new WaitForSeconds(m_RingFireDelay);
            }

            Destroy(gameObject);
        }
    }
}
