using UnityEngine;

namespace Shooter.Gameplay
{
    /// <summary>
    /// Пистолет игрока. Переопределяет стрельбу базового класса
    /// <see cref="Weapon_Base"/>: в обычном режиме бьёт одной точной пулей, в
    /// усиленном (<see cref="Weapon_Base.m_PowerLevel"/> == 1) — веером из трёх пуль
    /// и чуть быстрее. Свой Update нужен, потому что у пистолета нет очередей —
    /// он стреляет одиночными с собственным темпом.
    /// </summary>
    public class PWeapon_Pistol : Weapon_Base
    {
        [Header("Пистолет: темп по уровням силы")]
        [Tooltip("Задержка между выстрелами в обычном режиме, сек")]
        public float FireDelayNormal = .2f;
        [Tooltip("Задержка между выстрелами в усиленном режиме, сек")]
        public float FireDelayPowered = .17f;
        [Tooltip("Угол между пулями веера в усиленном режиме, градусы")]
        public float PoweredSpreadStep = 10f;

        void Update()
        {
            // Усиление ускоряет стрельбу.
            FireDelay = (m_PowerLevel == 1) ? FireDelayPowered : FireDelayNormal;

            FireDelayTimer = Mathf.Max(0, FireDelayTimer - Time.deltaTime);
            RecoilTimer = Mathf.Max(0, RecoilTimer - 10 * Time.deltaTime); // своя, более резкая отдача

            if (Input_FireHold && FireDelayTimer == 0)
            {
                FireWeapon();
                FireDelayTimer = FireDelay;
                RecoilTimer = 1f; // запускаем импульс отдачи
            }
        }

        public override void FireWeapon()
        {
            if (m_PowerLevel == 0)
            {
                // Обычный режим: одна точная пуля.
                SpawnBullet(0f);
            }
            else
            {
                // Усиленный режим: веер из трёх пуль (−10°, 0°, +10°).
                for (int i = -1; i <= 1; i++)
                    SpawnBullet(i * PoweredSpreadStep);
            }

            SpawnMuzzleEffect();
        }

        /// <summary>Создаёт одну пулю, повёрнутую на angleDeg от направления ствола.</summary>
        void SpawnBullet(float angleDeg)
        {
            GameObject bullet = Instantiate(BulletPrefab);
            bullet.transform.position = m_FirePoint.position;
            bullet.transform.forward = Quaternion.Euler(0, angleDeg, 0) * m_FirePoint.forward;

            Projectile_Base proj = bullet.GetComponent<Projectile_Base>();
            proj.Creator = m_Owner;
            proj.Speed = ProjectileSpeed;
            proj.Damage = Damage;
            proj.m_Range = Range;

            Destroy(bullet, BulletLifetime);
        }

        /// <summary>Создаёт вспышку выстрела на точке <see cref="Weapon_Base.m_ParticlePoint"/>.</summary>
        void SpawnMuzzleEffect()
        {
            GameObject effect = Instantiate(EffectPrefab);
            effect.transform.SetParent(m_ParticlePoint);
            effect.transform.localPosition = Vector3.zero;
            effect.transform.forward = m_ParticlePoint.forward;
            Destroy(effect, EffectLifetime);
        }
    }
}
