using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public float WalkSpeed = 10;
    public float rotationSpeed = 10f;

    public Animator animator;
    public Transform cameraTransform;

    private Rigidbody m_rigidbody;
    private PlayerInputController input;
    private PlayerHeadController headController;

    private Vector3 moveDirection;

    private void Awake()
    {
        m_rigidbody = GetComponent<Rigidbody>();
        input = GetComponent<PlayerInputController>();
        animator = GetComponent<Animator>();
        headController = GetComponent<PlayerHeadController>();

        if (m_rigidbody != null)
        {
            m_rigidbody.freezeRotation = true;
        }
    }

    private void FixedUpdate()
    {
        Vector2 m_moveAmt = input.MoveAmount;

        float horizontal = m_moveAmt.x;
        float vertical = m_moveAmt.y;

        Vector3 cameraForward = cameraTransform.forward;
        Vector3 cameraRight = cameraTransform.right;

        cameraForward.y = 0f;
        cameraRight.y = 0f;

        cameraForward.Normalize();
        cameraRight.Normalize();

        moveDirection = (cameraForward * vertical + cameraRight * horizontal).normalized;

        if (headController.isHoldingHead)
        {
            m_rigidbody.MovePosition(
                m_rigidbody.position + Time.deltaTime * WalkSpeed * moveDirection
            );
        }
        else
        {
            if (moveDirection.magnitude >= 0.1f)
            {
                m_rigidbody.MovePosition(
                    m_rigidbody.position + Time.deltaTime * WalkSpeed * moveDirection
                );

                Quaternion targetRotation = Quaternion.LookRotation(moveDirection);
                transform.rotation = Quaternion.Slerp(
                    transform.rotation,
                    targetRotation,
                    rotationSpeed * Time.deltaTime
                );
            }
        }

        bool isMoving = m_moveAmt.magnitude > 0.1f;
        animator.SetBool("isWalking", isMoving);
    }
}