using System;
using System.Collections;
using System.IO;
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Text;
using System.Xml;
using UnityEngine;
using Wizard;

namespace Cute;

public class DeviceManager : MonoBehaviour, IManager
{
	public enum TextureCompression
	{
		ETC,
		DXT,
		ATC,
		PVRTC
	}

	public enum DeviceType
	{
		NONE,
		IPHONE,
		ANDROID,
		WINDOWS,
		OSX
	}

	private const string BUILDPARAMFILE = "/CuteBuildParam.xml";

	private string strBuildVersionName = "9.9.9";

	private TextureCompression textureCommpression;

	private IPAddress _ipAddress;

	private string _winOsVersion;

	private bool tokenSent;

	private string _getIpAddressWithFamilyTypeLog = "";

	private void Awake()
	{
		CheckTextureCompression();
	}

	private void Start()
	{
		SetBuildVersionName();
		Toolbox.DeviceManager = this;
	}

	private void Update()
	{
	}

	private void OnDestroy()
	{
	}

	public TextureCompression GetTextureCompression()
	{
		return textureCommpression;
	}

	private void CheckTextureCompression()
	{
		textureCommpression = TextureCompression.DXT;
	}

	public string GetModelName()
	{
		return SystemInfo.deviceModel;
	}

	public string GetOsVersion()
	{
		if (string.IsNullOrEmpty(_winOsVersion))
		{
			try
			{
				string operatingSystem = SystemInfo.operatingSystem;
				string value = Environment.OSVersion.Version.ToString();
				StringBuilder stringBuilder = new StringBuilder();
				stringBuilder.Append(operatingSystem.Substring(0, operatingSystem.IndexOf('(') + 1));
				stringBuilder.Append(value);
				stringBuilder.Append(operatingSystem.Substring(operatingSystem.IndexOf(')')));
				_winOsVersion = stringBuilder.ToString();
			}
			catch (Exception)
			{
				_winOsVersion = SystemInfo.operatingSystem;
			}
		}
		return _winOsVersion;
	}

	public int GetDeviceType()
	{
		return 3;
	}

	public string GetAppVersionName()
	{
		return strBuildVersionName;
	}

	public string GetLocale()
	{
		return CustomPreference._localePref;
	}

	public string getSignature()
	{
		return "";
	}

	public bool isRootUser()
	{
		return false;
	}

	public string GetDeviceUniqueIdentifier()
	{
		string text = "";
		text = SystemInfo.deviceUniqueIdentifier;
		if (string.IsNullOrEmpty(text))
		{
			text = "";
		}
		return text;
	}

	public string GetDeviceName()
	{
		return SystemInfo.deviceModel;
	}

	public string GetGraphicsDeviceName(bool textureCheck = false)
	{
		StringBuilder stringBuilder = new StringBuilder();
		stringBuilder.Append(SystemInfo.graphicsDeviceName);
		if (textureCheck)
		{
			if (SystemInfo.SupportsTextureFormat(TextureFormat.ETC2_RGB) && SystemInfo.SupportsTextureFormat(TextureFormat.ETC2_RGBA8))
			{
				stringBuilder.Append("[ETC2=1]");
			}
			else
			{
				stringBuilder.Append("[ETC2=0]");
			}
			if (SystemInfo.SupportsTextureFormat(TextureFormat.ASTC_6x6) && SystemInfo.SupportsTextureFormat(TextureFormat.ASTC_6x6))
			{
				stringBuilder.Append("[ASTC=1]");
			}
			else
			{
				stringBuilder.Append("[ASTC=0]");
			}
		}
		return stringBuilder.ToString();
	}

	private IPAddress GetIpAddressWithFamilyType(AddressFamily family = AddressFamily.InterNetwork)
	{
		_getIpAddressWithFamilyTypeLog = "";
		_getIpAddressWithFamilyTypeLog += "GetIpAddressWithFamilyType ";
		if (family == AddressFamily.InterNetworkV6 && !Socket.OSSupportsIPv6)
		{
			return null;
		}
		UnicastIPAddressInformation unicastIPAddressInformation = null;
		NetworkInterface[] allNetworkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
		_getIpAddressWithFamilyTypeLog += "GetIpAddressWithFamilyType2 ";
		NetworkInterface[] array = allNetworkInterfaces;
		foreach (NetworkInterface networkInterface in array)
		{
			if (networkInterface.OperationalStatus != OperationalStatus.Up)
			{
				_getIpAddressWithFamilyTypeLog = _getIpAddressWithFamilyTypeLog + " OperationalStatus" + networkInterface.OperationalStatus;
				continue;
			}
			NetworkInterfaceType networkInterfaceType = networkInterface.NetworkInterfaceType;
			if (networkInterfaceType != NetworkInterfaceType.Wireless80211 && networkInterfaceType != NetworkInterfaceType.Ethernet)
			{
				_getIpAddressWithFamilyTypeLog = _getIpAddressWithFamilyTypeLog + " Type " + networkInterfaceType;
				continue;
			}
			IPInterfaceProperties iPProperties = networkInterface.GetIPProperties();
			if (iPProperties.GatewayAddresses.Count == 0)
			{
				_getIpAddressWithFamilyTypeLog += " GatewayAddresses.Count 0 ";
				continue;
			}
			foreach (UnicastIPAddressInformation unicastAddress in iPProperties.UnicastAddresses)
			{
				if (unicastAddress.Address.AddressFamily != family)
				{
					continue;
				}
				if (IPAddress.IsLoopback(unicastAddress.Address))
				{
					_getIpAddressWithFamilyTypeLog += " IsLoopback ";
					continue;
				}
				if (!unicastAddress.IsDnsEligible)
				{
					if (unicastIPAddressInformation == null)
					{
						unicastIPAddressInformation = unicastAddress;
					}
					_getIpAddressWithFamilyTypeLog += " ip.IsDnsEligible ";
					continue;
				}
				return unicastAddress.Address;
			}
		}
		_getIpAddressWithFamilyTypeLog += "GetIpAddressWithFamilyType3 ";
		return unicastIPAddressInformation?.Address;
	}

	public string GetIpAddress()
	{
		if (_ipAddress != null)
		{
			return _ipAddress.ToString();
		}
		LocalLog.AccumulateTraceInquiryLog("GetIpAddress " + StackTraceUtility.ExtractStackTrace());
		_ipAddress = GetIpAddressWithFamilyType();
		if (_ipAddress == null)
		{
			LocalLog.AccumulateTraceInquiryLog("GetIpAddress Empty " + _getIpAddressWithFamilyTypeLog + " " + StackTraceUtility.ExtractStackTrace());
			return string.Empty;
		}
		return _ipAddress.ToString();
	}

	public void ClearIpAddress()
	{
		_ipAddress = null;
		LocalLog.AccumulateTraceInquiryLog("ClearIpAddress " + StackTraceUtility.ExtractStackTrace());
	}

	public string GetCarrier()
	{
		return "";
	}

	public void SetVersionName()
	{
		SetBuildVersionName();
	}

	public void SetBuildVersionName()
	{
		string text = Application.streamingAssetsPath + "/CuteBuildParam.xml";
		if (!File.Exists(text))
		{
			return;
		}
		XmlDocument xmlDocument = new XmlDocument();
		xmlDocument.Load(text);
		if (xmlDocument.FirstChild == null || xmlDocument.FirstChild.NextSibling == null)
		{
			return;
		}
		IEnumerator enumerator = xmlDocument.FirstChild.NextSibling.GetEnumerator();
		while (enumerator.MoveNext())
		{
			XmlNode xmlNode = (XmlNode)enumerator.Current;
			if (xmlNode.Name.Equals("versionName"))
			{
				strBuildVersionName = xmlNode.InnerText;
				break;
			}
		}
	}
}
