using System;
using Unity.AI.Navigation;
using UnityEngine;
using UnityEngine.AI;

namespace AI.CamGirl
{
    [RequireComponent(typeof(NavMeshAgent))]
    [RequireComponent(typeof(Animator))]
    public class CamGirlLocomotion : MonoBehaviour
    {
        [SerializeField] private float _wanderRadius = 5f;

        private NavMeshAgent _navMeshAgent;
        private Animator _animator;
        private bool _isWandering;
        
        private static readonly int WalkSpeed = Animator.StringToHash("WalkSpeed");

        public event Action<Vector3> OnWalk;
        public event Action<Vector3> OnRun;

        private void Awake()
        {
            _navMeshAgent = GetComponent<NavMeshAgent>();
            _animator = GetComponent<Animator>();
        }
        
        private void Update()
        {
            Debug.DrawLine(transform.position, _navMeshAgent.destination);
            HandleDestinationFromClick();
        }

        private void LateUpdate()
        {
            float speed = _navMeshAgent.velocity.magnitude;
            _animator.SetFloat(WalkSpeed, speed);
        }

        public void Walk(Vector3 destination)
        {
            _navMeshAgent.destination = destination;
            OnWalk?.Invoke(destination);
        }

        public void Run(Vector3 destination)
        {
            _navMeshAgent.destination = destination;
            OnRun?.Invoke(destination);
        }

        private void HandleDestinationFromClick()
        {
            if (Input.GetMouseButtonDown(0))
            {
                Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                if (Physics.Raycast(ray, out RaycastHit hitInfo, Mathf.Infinity) &&
                    hitInfo.collider.TryGetComponent(out NavMeshSurface navMesh))
                {
                    _navMeshAgent.destination = hitInfo.point;
                }
            }
        }
    }
}