using System;
using Mirror;
using TMPro;
using UnityEngine;

public class MyNetworkPlayer : NetworkBehaviour
{
    [Header("Connections")]
    [SerializeField] private TMP_Text _playerNameObject;
    [Header("Variables")]
    [SyncVar(hook = nameof(SetPlayerNameTagText))]
    [SerializeField]
    private string _displayName = "Missing Name";

    [SyncVar(hook = nameof(SetPlayerNameTagColor))]
    [SerializeField]
    private Color _playerColor = Color.black;

    [SyncVar(hook = nameof(UpdateTransform))]
    [SerializeField]
    private Transform _transform;

    [Server]
    public void SetDisplayName(string newDisplayName)
    {
        _displayName = newDisplayName;
    }

    [Server]
    public void SetPlayerColor(Color newPlayerColor)
    {
        _playerColor = newPlayerColor;
    }

    private void SetPlayerNameTagText(string oldText, string newText)
    {
        if (_playerNameObject != null)
        {
            _playerNameObject.text = newText;
        }
    }

    private void SetPlayerNameTagColor(Color oldColor, Color newColor)
    {
        if (_playerNameObject != null)
        {
            _playerNameObject.color = newColor;
        }
    }

    private void OnConnectedToServer()
    {
        BindTransform();
    }

    [Server]
    private void BindTransform()
    {
        _transform = transform;
    }

    [Server]
    private void UpdateTransform(Transform oldValue, Transform newValue)
    {
        var cachedTransform = transform;
        cachedTransform.position = newValue.position;
        cachedTransform.rotation = newValue.rotation;
    }

    [Client]
    private void Update()
    {
        _transform = transform;
    }
}