using UnityEngine;

namespace Shooter.Gameplay
{
    /// <summary>
    /// Альтернативная проверка попадания снаряда — через перекрытие сферы
    /// (OverlapSphere). В отличие от <see cref="Projectile_Base"/> учитывает команду:
    /// снаряд врага бьёт игрока, снаряд игрока бьёт врагов; блоки разрушают оба.
    /// </summary>
    public class ProjectileCollision : MonoBehaviour
    {
        [Header("Параметры")]
        [Tooltip("Урон при попадании")]
        public float m_Damage = 1;
        [Tooltip("Радиус проверки попадания")]
        public float m_HitRadius = 0.5f;
        [Tooltip("true — снаряд врага (бьёт игрока); false — снаряд игрока (бьёт врагов)")]
        public bool m_IsEnemyTeam = true;

        [Header("Ссылки")]
        public GameObject m_Creator;
        public GameObject m_HitParticle;

        void Update()
        {
            Collider[] hits = Physics.OverlapSphere(transform.position, m_HitRadius);
            foreach (Collider col in hits)
            {
                GameObject target = col.gameObject;
                if (target == m_Creator)
                    continue;

                bool hitPlayer = target.tag == "Player" && m_IsEnemyTeam;
                bool hitEnemy = target.tag == "Enemy" && !m_IsEnemyTeam;
                bool hitBlock = target.tag == "Block";

                if (hitPlayer || hitEnemy || hitBlock)
                {
                    DamageControl d = target.GetComponent<DamageControl>();
                    if (d != null)
                        d.ApplyDamage(m_Damage, transform.forward, 1);
                    CreateHitParticle();
                    Destroy(gameObject);
                }
            }
        }

        public void CreateHitParticle()
        {
            GameObject obj = Instantiate(m_HitParticle);
            obj.transform.position = transform.position;
            Destroy(obj, 3);
        }
    }
}
