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

using FishNet.Connection;
using FishNet.Object;
public class PlayerController : NetworkBehaviour
{
    [Header("Movement")]
    public float speed = 5f;
    public float jumpPower = 4f;
    public float gravity = 9.8f;
    public float sens = 30f;

    private float yVelo;
    private Camera playerCam;
    private CharacterController controller;
    private Player.OnFootActions onFootActions;

    private void Awake()
    {
        onFootActions = new Player().OnFoot;
    }
    private void OnEnable()
    {
        onFootActions.Enable();
    }

    private void OnDisable()
    {
        onFootActions.Disable();
    }

    public override void OnStartClient()
    {
        base.OnStartClient();
        if (base.IsOwner)
        {
            playerCam = Camera.main;
            playerCam.transform.position = new Vector3(this.transform.position.x, this.transform.position.y + 0.6f, this.transform.position.z);
            playerCam.transform.parent = this.transform;
        } else
        {
            gameObject.GetComponent<PlayerController>().enabled = false;
        }
    }

    private void Start()
    {
        controller = this.GetComponent<CharacterController>();
    }


    private void Update()
    {
        Vector2 moveVector = onFootActions.Move.ReadValue<Vector2>();
        Move(moveVector);
        yVelo -= gravity * Time.deltaTime;
    }

    private void Move(Vector2 moveVector)
    {
        Vector3 camForwards = playerCam.transform.forward;
        Vector3 camRight = playerCam.transform.right;

        camForwards.y = 0f;
        camRight.y = 0f;

        Vector3 moveDir = moveVector.y * camForwards + moveVector.x * camRight;
        moveDir *= speed * Time.deltaTime;

        if (controller.isGrounded & yVelo < 0)
        {
            yVelo = -2f;
        }

        controller.Move(moveDir);
    }

    private void Jump()
    {
        if (controller.isGrounded)
        {
            yVelo = Mathf.Sqrt(jumpPower * 3 * gravity);
        }
    }

    private void Look(Vector2 lookVector)
    {
        controller.transform.Rotate(Vector3.up * lookVector.y);

    }
}