using System;
using Microsoft.Win32;

namespace Intelix.Helper;

public static class WindowsInfo
{
	public static string GetProductName()
	{
		try
		{
			using RegistryKey registryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion");
			if (registryKey == null)
			{
				return "Unknown";
			}
			string obj = (registryKey.GetValue("ProductName") as string) ?? "Unknown";
			string text = (registryKey.GetValue("ReleaseId") as string) ?? (registryKey.GetValue("DisplayVersion") as string) ?? "";
			return (obj + " " + text).Trim();
		}
		catch
		{
			return "Unknown";
		}
	}

	public static string GetBuildNumber()
	{
		try
		{
			using RegistryKey registryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion");
			if (registryKey == null)
			{
				return "Unknown";
			}
			return registryKey.GetValue("CurrentBuild")?.ToString() ?? registryKey.GetValue("CurrentBuildNumber")?.ToString() ?? "Unknown";
		}
		catch
		{
			return "Unknown";
		}
	}

	public static string GetArchitecture()
	{
		try
		{
			return Environment.Is64BitOperatingSystem ? "x64" : "x86";
		}
		catch
		{
			return "Unknown";
		}
	}

	public static string GetVersion()
	{
		try
		{
			using RegistryKey registryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion");
			if (registryKey == null)
			{
				return "Unknown";
			}
			object value = registryKey.GetValue("CurrentMajorVersionNumber");
			object value2 = registryKey.GetValue("CurrentMinorVersionNumber");
			if (value != null && value2 != null)
			{
				return $"{value}.{value2}";
			}
			string text = registryKey.GetValue("CurrentVersion") as string;
			if (!string.IsNullOrEmpty(text))
			{
				return text;
			}
			return "Unknown";
		}
		catch
		{
			return "Unknown";
		}
	}

	public static string GetFullInfo()
	{
		return "OS Product: " + GetProductName() + "\nOS Build: " + GetBuildNumber() + "\nOS Arch: " + GetArchitecture();
	}
}
