﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace Arugula.Games
{
    public class RigidbodyProjectile : Projectile
    {
        [Header("Rigidbody")]
        [Min(0)]
        public float minimumVelocity;
        [Min(0)]
        public float minimumRelativeVelocity;
        [Min(0)]
        public float debounce = 0;
        Rigidbody rb;

        float damageDebounce;
        float impactDebounce;

        public override void Start()
        {
            base.Start();
            rb = GetComponent<Rigidbody>();
        }

        private void OnCollisionEnter(Collision collision)
        {
            if (collision.relativeVelocity.magnitude < minimumRelativeVelocity)
                return;

            if (rb.velocity.magnitude < minimumVelocity)
                return;

            bool impact = false;
            if (Time.time >= impactDebounce)
            {
                if (IsImpactable(collision.collider))
                {
                    impactDebounce = Time.time + debounce;
                    _OnImpact();
                    impact = true;
                }
            }

            if (Time.time >= damageDebounce)
            {
                if (!used && IsDamageable(collision.collider))
                {
                    var d = DestructibleObject.Get(collision.collider);
                    if (d)
                    {
                        Use();
                        damageDebounce = Time.time + debounce;
                        damageInfo.meta = collision;
                        d.Damage(damageInfo);
                        _OnDamage();
                    }
                }
            }

            if (useOnImpact && impact && !used)
            {
                Use();
            }
        }
    }
}
