using UnityEngine;
using UnityEngine.InputSystem;

public class ThirdPersonCamera : MonoBehaviour
{
    [SerializeField]
    private Transform target;

    [SerializeField]
    private InputActionReference lookAction;

    [SerializeField]
    private float distance = 5f;

    [SerializeField]
    private float height = 1.8f;

    [SerializeField]
    private float sensitivity = 1f;

    [SerializeField]
    private float smoothness = 12f;

    [SerializeField]
    private LayerMask obstacles;

    private float yaw;
    private float pitch;

    void LateUpdate()
    {
        Vector2 look =
            lookAction.action.ReadValue<Vector2>();

        yaw += look.x * sensitivity;
        pitch -= look.y * sensitivity;

        pitch =
            Mathf.Clamp(
                pitch,
                -30f,
                70f
            );

        Quaternion rotation =
            Quaternion.Euler(
                pitch,
                yaw,
                0f
            );

        Vector3 origin =
            target.position +
            Vector3.up * height;

        Vector3 desiredPosition =
            origin +
            rotation *
            Vector3.back *
            distance;

        transform.position =
            Vector3.Lerp(
                transform.position,
                desiredPosition,
                smoothness *
                Time.deltaTime
            );

        transform.LookAt(origin);
    }
}