using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.Controls;

public class PlayerMovement : MonoBehaviour
{

    PlayerInput playerInput;
    InputActionMap actionMap;
    InputAction lookAction;
    InputAction moveAction;
    public float MoveSpeed = 5f;
    [SerializeField] GameObject Player;
    [SerializeField] GameObject PlayerCamera;
    CharacterController Controler;
    Rigidbody rb;
    public float Sensitivity;



    private void OnEnable()
    {
        lookAction.Enable();
    }

    public void Awake()
    {
        playerInput = GetComponent<PlayerInput>();
        actionMap = playerInput.actions.FindActionMap("Player -In game-", throwIfNotFound: true);
        moveAction = actionMap.FindAction("Movement", throwIfNotFound: true);
        lookAction = actionMap.FindAction("Look", throwIfNotFound: true);
        Controler = GetComponent<CharacterController>();
        rb = GetComponent<Rigidbody>();

        Vector2 MouseDelta = lookAction.ReadValue<Vector2>();

        InputSystem.AddDevice<Mouse>();
        InputSystem.EnableDevice(Mouse.current);


        //For MouseLookingAround
        Vector3 euler = PlayerCamera.transform.rotation.eulerAngles;
        X = euler.x;
        Y = euler.y;

    }
    public void Start()
    {
        Cursor.lockState = CursorLockMode.Locked;
        Cursor.visible = false;

    }
    public void Update()
    {


        Movement();
        MouseLookingAround();
    }

    private void Movement()
    {
        Vector3 moveInput = moveAction.ReadValue<Vector3>();

        Vector3 move = new Vector3(moveInput.x, moveInput.y, moveInput.z);
        if (move.magnitude > 1f) move.Normalize();

        if (move.y == 0)
        {
            if (Mathf.Abs(move.x) > 0.1f)
            {
                transform.position += move * MoveSpeed * Time.deltaTime;
            }

            if (Mathf.Abs(move.z) > 0.1f)
            {
                transform.position += move * MoveSpeed * Time.deltaTime;
            }
        }
    }


    //Mouse script

    private float X;
    private float Y;







    private void MouseLookingAround()
    {
        Vector2 mouseDelta = lookAction.ReadValue<Vector2>() * Sensitivity;

        X -= mouseDelta.y;
        X = Mathf.Clamp(X, -90f, 90f);

        PlayerCamera.transform.localRotation = Quaternion.Euler(X, 0f, 0f);
        transform.Rotate(Vector3.up * mouseDelta.x);
    }
    

}