using System.Collections;
using UnityEngine;

[RequireComponent(typeof(Collider))]
public class EventTriggerOnStay : MonoBehaviour
{
    [Tooltip("Тег объекта, который должен активировать триггер.")]
    [SerializeField] private string _targetTag = "Player";

    [Tooltip("Событие, которое будет вызвано.")]
    [SerializeField] private GameEvent _eventToRaise;

    [Tooltip("Время в секундах, которое объект должен провести в триггере для срабатывания.")]
    [SerializeField] private float _timeToStay = 2.0f;

    [Tooltip("Если true, событие будет срабатывать только один раз.")]
    [SerializeField] private bool _triggerOnce = true;

    private bool _hasBeenTriggered = false;
    private Coroutine _timerCoroutine;

    private void OnTriggerEnter(Collider other)
    {
        if ((_hasBeenTriggered && _triggerOnce) || !other.CompareTag(_targetTag))
        {
            return;
        }

        // Запускаем корутину-таймер
        _timerCoroutine = StartCoroutine(TimerCoroutine());
    }

    private void OnTriggerExit(Collider other)
    {
        if (other.CompareTag(_targetTag) && _timerCoroutine != null)
        {
            // Если игрок покинул зону, останавливаем таймер
            StopCoroutine(_timerCoroutine);
            _timerCoroutine = null;
        }
    }

    private IEnumerator TimerCoroutine()
    {
        yield return new WaitForSeconds(_timeToStay);

        _eventToRaise.Raise();
        _hasBeenTriggered = true;
        _timerCoroutine = null;
    }
}