using Unity.Netcode;
using UnityEngine;
using UnityEngine.InputSystem;
using Unity.Cinemachine;

public class NetworkPlayerController : NetworkBehaviour
{
    [Header("Movement Settings")]
    public float moveSpeed = 5f;
    public float rotationSpeed = 10f;
    public float jumpHeight = 1.5f;
    public float gravity = -19.62f;

    [Header("Input")]
    [SerializeField] private InputActionAsset inputActions;

    private Vector2 _moveInput;
    private CharacterController _controller;
    private PlayerInputActions _inputActions;
    private Animator _animator;

    void Awake()
    {
        _controller = GetComponent<CharacterController>();
        _animator = GetComponent<Animator>();
    }

    // NGO 초기화
    public override void OnNetworkSpawn()
    {
        if (!IsOwner) return;

        // 1. 씬에 있는 가상 카메라를 찾습니다.
        // Unity 6에서는 CinemachineVirtualCamera 대신 CinemachineCamera를 주로 사용합니다.
        var vcam = GameObject.FindAnyObjectByType<CinemachineCamera>();

        if (vcam != null)
        {
            // 2. 카메라의 Follow와 LookAt 대상을 '나'로 설정합니다.
            vcam.Follow = transform;
            vcam.LookAt = transform;
            Debug.Log("<color=green>[Camera] 로컬 플레이어에게 카메라가 연결되었습니다.</color>");
        }

        _inputActions = new PlayerInputActions();
        _inputActions.Enable();
    }

    public override void OnNetworkDespawn()
    {
        if (IsOwner)
        {
            if (inputActions != null)
            {
                inputActions.Disable();
            }
        }
    }

    void Update()
    {
        if (!IsOwner) return;

        _moveInput = _inputActions.Player.Move.ReadValue<Vector2>();
        Vector3 move = new Vector3(_moveInput.x, 0, _moveInput.y).normalized;
        if (move.magnitude >= 0.1f)
        {
            Quaternion targetRotation = Quaternion.LookRotation(move);
            transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, rotationSpeed * Time.deltaTime);
            _controller.Move(move * moveSpeed * Time.deltaTime);
        }

        _animator.SetFloat("MoveSpeed", move.magnitude);
    }
}
