﻿using System;
using System.Net.NetworkInformation;
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.Events;
using System.Threading.Tasks;

public static class NetUtil
{
	public static async void PingIP(string _IP)
    {
	    System.Net.NetworkInformation.Ping _ping = new System.Net.NetworkInformation.Ping();
	    
	    PingReply _reply = await _ping.SendPingAsync(_IP, 10000);
		
	    DebugChannelSO.OverrideRaise("NetUtil",
		    "Response received from " + _IP + " in " + _reply.RoundtripTime + " ms",
		    Color.magenta);
    }

	public static async Task<string> GetVersionFromURL(string _URL, bool _requireValidCert = true)
    {
	    UnityWebRequest _request = UnityWebRequest.Get(_URL);
	    _request.SetRequestHeader("Content-Type", "application/json");

	    if (!_requireValidCert) {
		    var cert = new ForceAcceptAll();

		    _request.certificateHandler = cert;
	    }

	    await _request.SendWebRequest();
	    
	    DebugChannelSO.OverrideRaise("NetUtil", 
		    "Received web response from Server...", 
		    Color.magenta);
		    
	    if (_request.isHttpError || _request.isNetworkError)
	    {
		    DebugChannelSO.OverrideRaise("NetUtil", new string[] {
			    "Server request encountered an error and cannot validate.",
			    _request.error.ToString() },
			    Color.magenta,
			    DebugChannelSO.Severity.Error);
			    
		    return "";
	    }
	    
	    try
	    {
		    GameVersion _serverVersionJSON = JsonUtility.FromJson<GameVersion>(_request.downloadHandler.text);

		    DebugChannelSO.OverrideRaise("NetUtil",
			    "Server version: " + _serverVersionJSON.version.ToString(),
			    Color.magenta);
			
		    return _serverVersionJSON.version.ToString();
	    }
	    catch (Exception e)
	    {
		    DebugChannelSO.OverrideRaise("NetUtil",
			    e.ToString(),
			    Color.magenta,
			    DebugChannelSO.Severity.Error);

		    DebugChannelSO.OverrideRaise("NetUtil", new string[] {
			    "Unable to verify version from https://blackrocket.com/files/battle-royale-version.json.",
			    "Please check your internet connection and port access.",
			    "If problems persist, please contact Black Rocket Support at https://www.blackrocket.com/help"},
			    Color.magenta,
			    DebugChannelSO.Severity.Error);
		    
		    return "";
	    }
    }
}
