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

public class RaycastDoor : MonoBehaviour
{
    [SerializeField] private Camera _camera;
    [SerializeField] private CursorSwitcher _cursorSwitcher;
    [SerializeField] private float _speed = 3f;
    [SerializeField] private float _openAngle = 81.087f;
    [SerializeField] private float _closedAngle = 1.882f;

    private bool _isOpen = false;
    private Transform _doorPivot;
    private Quaternion _targetRotation;
    private bool _hasTarget = false;

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = _camera.ScreenPointToRay(Input.mousePosition);
            RaycastHit[] hits = Physics.RaycastAll(ray, _cursorSwitcher.InteractDistance);
            foreach (var hit in hits)
            {
                Transform current = hit.collider.transform;
                while (current != null)
                {
                    if (current.CompareTag("Door"))
                    {
                        _doorPivot = current.parent;
                        _isOpen = !_isOpen;
                        float angle = _isOpen ? _openAngle : _closedAngle;
                        _targetRotation = Quaternion.Euler(0f, angle, 0f);
                        _hasTarget = true;
                        return;
                    }
                    current = current.parent;
                }
            }
        }

        if (_hasTarget && _doorPivot != null)
        {
            _doorPivot.localRotation = Quaternion.Lerp(_doorPivot.localRotation, _targetRotation, Time.deltaTime * _speed);

            if (Quaternion.Angle(_doorPivot.localRotation, _targetRotation) < 0.2f)
            {
                _doorPivot.localRotation = _targetRotation;
                _hasTarget = false;
            }
        }
    }
}
