using System.Text;

namespace QCRPG.TSL.NFC.Packets;

public static class NfceeProtocolsAndInterfacesInfo
{
	public static NfceeProtocolsAndInterfacesEnum ValueToNfceeProtocolsAndInterfaces(uint value)
	{
		switch (value)
		{
		case 0u:
			return NfceeProtocolsAndInterfacesEnum.ADPU;
		case 1u:
			return NfceeProtocolsAndInterfacesEnum.HCI_ACCESS;
		case 2u:
			return NfceeProtocolsAndInterfacesEnum.TYPE_3_TAG_COMMAND_SET;
		case 3u:
			return NfceeProtocolsAndInterfacesEnum.TRANSPARENT;
		default:
			if (value >= 4 && value <= 127)
			{
				return NfceeProtocolsAndInterfacesEnum.RFU;
			}
			if (value >= 128 && value <= 254)
			{
				return NfceeProtocolsAndInterfacesEnum.PROPRIETARY;
			}
			if (value == 255)
			{
				return NfceeProtocolsAndInterfacesEnum.RFU;
			}
			return NfceeProtocolsAndInterfacesEnum.InvalidNfceeProtocolsAndInterfacesValue;
		}
	}

	public static uint NfceeProtocolsAndInterfacesToValue(NfceeProtocolsAndInterfacesEnum enumItem)
	{
		switch (enumItem)
		{
		case NfceeProtocolsAndInterfacesEnum.ADPU:
			return 0u;
		case NfceeProtocolsAndInterfacesEnum.HCI_ACCESS:
			return 1u;
		case NfceeProtocolsAndInterfacesEnum.TYPE_3_TAG_COMMAND_SET:
			return 2u;
		case NfceeProtocolsAndInterfacesEnum.TRANSPARENT:
			return 3u;
		case NfceeProtocolsAndInterfacesEnum.RFU:
			return 4u;
		case NfceeProtocolsAndInterfacesEnum.PROPRIETARY:
			return 128u;
		default:
			if (enumItem == NfceeProtocolsAndInterfacesEnum.RFU)
			{
				return 255u;
			}
			return uint.MaxValue;
		}
	}

	public static string NfceeProtocolsAndInterfacesToString(NfceeProtocolsAndInterfacesEnum enumItem)
	{
		switch (enumItem)
		{
		case NfceeProtocolsAndInterfacesEnum.ADPU:
			return "ADPU";
		case NfceeProtocolsAndInterfacesEnum.HCI_ACCESS:
			return "HCI_ACCESS";
		case NfceeProtocolsAndInterfacesEnum.TYPE_3_TAG_COMMAND_SET:
			return "TYPE_3_TAG_COMMAND_SET";
		case NfceeProtocolsAndInterfacesEnum.TRANSPARENT:
			return "TRANSPARENT";
		case NfceeProtocolsAndInterfacesEnum.RFU:
			return "RFU";
		case NfceeProtocolsAndInterfacesEnum.PROPRIETARY:
			return "PROPRIETARY";
		default:
			if (enumItem == NfceeProtocolsAndInterfacesEnum.RFU)
			{
				return "RFU";
			}
			return "Invalid NfceeProtocolsAndInterfaces Value";
		}
	}

	public static string NfceeProtocolsAndInterfacesToDescription()
	{
		StringBuilder stringBuilder = new StringBuilder();
		stringBuilder.AppendLine("0x0 = ADPU");
		stringBuilder.AppendLine("0x1 = HCI_ACCESS");
		stringBuilder.AppendLine("0x2 = TYPE_3_TAG_COMMAND_SET");
		stringBuilder.AppendLine("0x3 = TRANSPARENT");
		stringBuilder.AppendLine("0x4-0x7F = RFU");
		stringBuilder.AppendLine("0x80-0xFE = PROPRIETARY");
		stringBuilder.AppendLine("0xFF = RFU");
		return stringBuilder.ToString();
	}
}
