using System.Collections;
using UnityEngine;

namespace Shooter.Gameplay
{
    /// <summary>
    /// Ящик с ресурсами: когда его разбивают (через <see cref="DamageControl"/>),
    /// откидывает крышку и выбрасывает кристаллы веером вверх, затем исчезает.
    /// </summary>
    public class ResourceCrate : MonoBehaviour
    {
        [Header("Содержимое и эффекты")]
        public GameObject[] m_ItemPrefabs;
        public GameObject m_ExplodeParticle;

        [Header("Крышка")]
        public GameObject m_LidObject;
        public Transform m_LidTransform;

        [HideInInspector] public DamageControl m_DamageControl;
        bool m_Opened = false;

        void Start()
        {
            m_DamageControl = GetComponent<DamageControl>();
        }

        void Update()
        {
            if (!m_Opened && m_DamageControl.IsDead)
            {
                TargetsControl.m_Main.RemoveTarget(GetComponent<TargetObject>());
                GetComponent<Collider>().enabled = false;
                StartCoroutine(Co_OpenChest());
            }
        }

        IEnumerator Co_OpenChest()
        {
            m_Opened = true;

            GameObject obj = Instantiate(m_ExplodeParticle);
            obj.transform.position = transform.position;
            Destroy(obj, 6);

            // Откидываем крышку до 130°.
            float lerp = 0;
            while (true)
            {
                m_LidObject.transform.localRotation = Quaternion.Euler(lerp * 130, 0, 0);
                lerp += 2 * Time.deltaTime;
                if (lerp >= 1)
                    break;
                yield return null;
            }
            m_LidObject.transform.localRotation = Quaternion.Euler(130, 0, 0);

            StartCoroutine(Co_CreateGems());
            yield return new WaitForSeconds(1.4f);

            obj = Instantiate(m_ExplodeParticle);
            obj.transform.position = transform.position;
            Destroy(obj, 6);

            Destroy(gameObject);
        }

        IEnumerator Co_CreateGems()
        {
            // Десять кристаллов веером вверх, по одному.
            for (int i = 0; i < 10; i++)
            {
                GameObject obj1 = Instantiate(m_ItemPrefabs[0]);
                obj1.transform.position = transform.position;
                obj1.GetComponent<Rigidbody>().linearVelocity = Helper.RotatedLenght(i * 36, 10) + new Vector3(0, 12, 0);
                yield return new WaitForSeconds(.1f);
            }
        }
    }
}
