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

public class Arrow : MonoBehaviour
{
    Rigidbody rb;
    // Float for speed of the arrow.
    [SerializeField] private float speed;
    // Float for time in seconds to wait to destroy the arrow on contact with any other gameobject that is no the player.
    [SerializeField] private float waitToDestroy;
    // Vector3 to set direction of travel for the arrow once the trigger is activated.
    [SerializeField] private Vector3 direction;

    private void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    private void OnTriggerEnter(Collider other)
    {
        // Checks to make sure other collider is the Player using tag.
        if (other.gameObject.CompareTag("Player"))
        {
            rb.velocity = direction * speed;
        }
    }

    private void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.TryGetComponent(out PlayerDeath playerDeath))
        {
            // Start Respawn coroutine.
            playerDeath.Respawn();
            // Destroy arrow on contact with player.
            Destroy(gameObject);
        }
        else
        {
            // If arrow makes contact with any other gameobject start DestroyArrow corountine.
            StartCoroutine(DestoryArrow());
        }
    }

    public IEnumerator DestoryArrow()
    {
        // set arrow velocity to zero wait for destory time and then destory the arrow.
        rb.velocity = Vector3.zero;
        yield return new WaitForSeconds(waitToDestroy);
        Destroy(gameObject);
    }
}