using UnityEngine;
using UnityEngine.InputSystem;
using TMPro;
using NeonTea.Quakeball.Networking;
using System;

public class NetDebugScreen : MonoBehaviour {

    public RectTransform BackgroundPanel;
    public TMP_Text ReceivedText;
    public TMP_Text SentText;
    public float UpdateInterval = 5f;

    private InputAction ToggleNetDebug;
    private float LastUpdate;
    private bool IsOpen;

    private void Start() {
        ToggleNetDebug = new InputAction("Toggle Net Debug", binding: "<Keyboard>/F3");
        ToggleNetDebug.Enable();
        ToggleNetDebug.performed += _ => {
            IsOpen = !IsOpen;
            BackgroundPanel.gameObject.SetActive(IsOpen);
        };
    }

    private void Update() {
        bool NetworkingAvailable = Net.Singleton.Instance != null && Net.Singleton.Instance.Peer.Running;
        if (IsOpen && !NetworkingAvailable) {
            ReceivedText.text = "No networking data to show";
            SentText.text = "";
        } else if (IsOpen && NetworkingAvailable) {
            var Peer = Net.Singleton.Instance.Peer;
            if (Time.time - LastUpdate > UpdateInterval) {
                LastUpdate = Time.time;
                float ToSeconds = 1f / (Peer.TrafficDataInterval / 1000f);
                string received = $"Total Bytes Receivd: {Peer.TrafficReceived * ToSeconds} B/s\nReceived by packet:";
                foreach (Type t in Peer.TrafficReceivedByPacket.Keys) {
                    received += $"\n{t.Name} - {Peer.TrafficReceivedByPacket[t] * ToSeconds} B/s";
                }
                ReceivedText.text = received;
                string sent = $"Total Bytes Sent: {Net.Singleton.Instance.Peer.TrafficSent * ToSeconds} B/s\nSent by packet:";
                foreach (Type t in Peer.TrafficSentByPacket.Keys) {
                    sent += $"\n{t.Name} - {Peer.TrafficSentByPacket[t] * ToSeconds} B/s";
                }
                SentText.text = sent;
            }
        }
    }
}
