using UnityEngine;
using UnityEngine.UI;
namespace Mirror.Examples.Basic
{
    public class PlayerUI : MonoBehaviour
    {
        [Header("Player Components")]
        public Image image;
        [Header("Child Text Objects")]
        public Text playerNameText;
        public Text playerDataText;
        Player player;
        /// 
        /// Caches the controlling Player object, subscribes to its events
        /// 
        /// Player object that controls this UI
        /// true if the Player object is the Local Player
        public void SetPlayer(Player player, bool isLocalPlayer)
        {
            // cache reference to the player that controls this UI object
            this.player = player;
            // subscribe to the events raised by SyncVar Hooks on the Player object
            player.OnPlayerNumberChanged += OnPlayerNumberChanged;
            player.OnPlayerColorChanged += OnPlayerColorChanged;
            player.OnPlayerDataChanged += OnPlayerDataChanged;
            // add a visual background for the local player in the UI
            if (isLocalPlayer)
                image.color = new Color(1f, 1f, 1f, 0.1f);
        }
        void OnDisable()
        {
            player.OnPlayerNumberChanged -= OnPlayerNumberChanged;
            player.OnPlayerColorChanged -= OnPlayerColorChanged;
            player.OnPlayerDataChanged -= OnPlayerDataChanged;
        }
        // This value can change as clients leave and join
        void OnPlayerNumberChanged(int newPlayerNumber)
        {
            playerNameText.text = string.Format("Player {0:00}", newPlayerNumber);
        }
        // Random color set by Player::OnStartServer
        void OnPlayerColorChanged(Color32 newPlayerColor)
        {
            playerNameText.color = newPlayerColor;
        }
        // This updates from Player::UpdateData via InvokeRepeating on server
        void OnPlayerDataChanged(int newPlayerData)
        {
            // Show the data in the UI
            playerDataText.text = string.Format("Data: {0:000}", newPlayerData);
        }
    }
}