using System.Text;

namespace QCRPG.TSL.BT.Packets;

public class SupportedFeaturesEnumCollection
{
	public enum FlowControlLagEnum
	{
		Lag_0_bytes,
		Lag_256_bytes,
		Lag_512_bytes,
		Lag_768_bytes,
		Lag_1024_bytes,
		Lag_1280_bytes,
		Lag_1536_bytes,
		Lag_1792_bytes,
		InvalidFlowControlLagValue
	}

	public static class FlowControlLagInfo
	{
		public static FlowControlLagEnum ValueToFlowControlLag(uint value)
		{
			return value switch
			{
				0u => FlowControlLagEnum.Lag_0_bytes, 
				1u => FlowControlLagEnum.Lag_256_bytes, 
				2u => FlowControlLagEnum.Lag_512_bytes, 
				3u => FlowControlLagEnum.Lag_768_bytes, 
				4u => FlowControlLagEnum.Lag_1024_bytes, 
				5u => FlowControlLagEnum.Lag_1280_bytes, 
				6u => FlowControlLagEnum.Lag_1536_bytes, 
				7u => FlowControlLagEnum.Lag_1792_bytes, 
				_ => FlowControlLagEnum.InvalidFlowControlLagValue, 
			};
		}

		public static uint FlowControlLagToValue(FlowControlLagEnum enumItem)
		{
			return enumItem switch
			{
				FlowControlLagEnum.Lag_0_bytes => 0u, 
				FlowControlLagEnum.Lag_256_bytes => 1u, 
				FlowControlLagEnum.Lag_512_bytes => 2u, 
				FlowControlLagEnum.Lag_768_bytes => 3u, 
				FlowControlLagEnum.Lag_1024_bytes => 4u, 
				FlowControlLagEnum.Lag_1280_bytes => 5u, 
				FlowControlLagEnum.Lag_1536_bytes => 6u, 
				FlowControlLagEnum.Lag_1792_bytes => 7u, 
				_ => uint.MaxValue, 
			};
		}

		public static string FlowControlLagToString(FlowControlLagEnum enumItem)
		{
			return enumItem switch
			{
				FlowControlLagEnum.Lag_0_bytes => "0 bytes", 
				FlowControlLagEnum.Lag_256_bytes => "256 bytes", 
				FlowControlLagEnum.Lag_512_bytes => "512 bytes", 
				FlowControlLagEnum.Lag_768_bytes => "768 bytes", 
				FlowControlLagEnum.Lag_1024_bytes => "1024 bytes", 
				FlowControlLagEnum.Lag_1280_bytes => "1280 bytes", 
				FlowControlLagEnum.Lag_1536_bytes => "1536 bytes", 
				FlowControlLagEnum.Lag_1792_bytes => "1792 bytes", 
				_ => "Invalid FlowControlLag Value", 
			};
		}

		public static string FlowControlLagToDescription()
		{
			StringBuilder stringBuilder = new StringBuilder();
			stringBuilder.AppendLine("0x0 = 0 bytes");
			stringBuilder.AppendLine("0x1 = 256 bytes");
			stringBuilder.AppendLine("0x2 = 512 bytes");
			stringBuilder.AppendLine("0x3 = 768 bytes");
			stringBuilder.AppendLine("0x4 = 1024 bytes");
			stringBuilder.AppendLine("0x5 = 1280 bytes");
			stringBuilder.AppendLine("0x6 = 1536 bytes");
			stringBuilder.AppendLine("0x7 = 1792 bytes");
			return stringBuilder.ToString();
		}
	}

	private SupportBitEnum _ThreeSlotPackets;

	private SupportBitEnum _FiveSlotPackets;

	private SupportBitEnum _Encryption;

	private SupportBitEnum _SlotOffset;

	private SupportBitEnum _TimingAccuracy;

	private SupportBitEnum _RoleSwitch;

	private SupportBitEnum _HoldMode;

	private SupportBitEnum _SniffMode;

	private SupportBitEnum _ParkState;

	private SupportBitEnum _PowerControlRequests;

	private SupportBitEnum _ChannelQualityDrivenDataRate;

	private SupportBitEnum _ScoLink;

	private SupportBitEnum _Hv2Packets;

	private SupportBitEnum _Hv3Packets;

	private SupportBitEnum _ULawLogSynchronousData;

	private SupportBitEnum _ALawLogSynchronousData;

	private SupportBitEnum _CvsdSynchronousData;

	private SupportBitEnum _PagingParameterNegotiation;

	private SupportBitEnum _PowerControl;

	private SupportBitEnum _TransparentSynchronousData;

	private FlowControlLagEnum _FlowControlLag;

	private SupportBitEnum _BroadcastEncryption;

	private SupportBitEnum _EnhancedDataRateAcl2MbpsMode;

	private SupportBitEnum _EnhancedDataRateAcl3MbpsMode;

	private SupportBitEnum _EnhancedInquiryScan;

	private SupportBitEnum _InterlacedInquiryScan;

	private SupportBitEnum _InterlacedPageScan;

	private SupportBitEnum _RssiWithInquiryResults;

	private SupportBitEnum _ExtendedScoLinkEv3Packets;

	private SupportBitEnum _Ev4Packets;

	private SupportBitEnum _Ev5Packets;

	private SupportBitEnum _AfhCapableSlave;

	private SupportBitEnum _AfhClassificationSlave;

	private SupportBitEnum _BrEdrNotSupported;

	private SupportBitEnum _LeSupportedController;

	private SupportBitEnum _ThreeSlotEnhancedDataRateAclPackets;

	private SupportBitEnum _FiveSlotEnhancedDataRateAclPackets;

	private SupportBitEnum _SniffSubrating;

	private SupportBitEnum _PauseEncryption;

	private SupportBitEnum _AfhCapableMaster;

	private SupportBitEnum _AfhClassificationMaster;

	private SupportBitEnum _EnhancedDataRateEsco2MbpsMode;

	private SupportBitEnum _EnhancedDataRateEsco3MbpsMode;

	private SupportBitEnum _ThreeSlotEnhancedDataRateEscoPackets;

	private SupportBitEnum _ExtendedInquiryResponse;

	private SupportBitEnum _SimultaneousLeAndBrEdrToSameDeviceCapableController;

	private SupportBitEnum _SecureSimplePairing;

	private SupportBitEnum _EncapsulatedPdu;

	private SupportBitEnum _ErroneousDataReporting;

	private SupportBitEnum _NonFlushablePacketBoundaryFlag;

	private SupportBitEnum _LinkSupervisionTimeoutChangedEvent;

	private SupportBitEnum _InquiryTxPowerLevel;

	private SupportBitEnum _EnhancedPowerControl;

	private SupportBitEnum _ExtendedFeatures;

	public SupportBitEnum ThreeSlotPackets
	{
		get
		{
			return _ThreeSlotPackets;
		}
		set
		{
			_ThreeSlotPackets = value;
		}
	}

	public SupportBitEnum FiveSlotPackets
	{
		get
		{
			return _FiveSlotPackets;
		}
		set
		{
			_FiveSlotPackets = value;
		}
	}

	public SupportBitEnum Encryption
	{
		get
		{
			return _Encryption;
		}
		set
		{
			_Encryption = value;
		}
	}

	public SupportBitEnum SlotOffset
	{
		get
		{
			return _SlotOffset;
		}
		set
		{
			_SlotOffset = value;
		}
	}

	public SupportBitEnum TimingAccuracy
	{
		get
		{
			return _TimingAccuracy;
		}
		set
		{
			_TimingAccuracy = value;
		}
	}

	public SupportBitEnum RoleSwitch
	{
		get
		{
			return _RoleSwitch;
		}
		set
		{
			_RoleSwitch = value;
		}
	}

	public SupportBitEnum HoldMode
	{
		get
		{
			return _HoldMode;
		}
		set
		{
			_HoldMode = value;
		}
	}

	public SupportBitEnum SniffMode
	{
		get
		{
			return _SniffMode;
		}
		set
		{
			_SniffMode = value;
		}
	}

	public SupportBitEnum ParkState
	{
		get
		{
			return _ParkState;
		}
		set
		{
			_ParkState = value;
		}
	}

	public SupportBitEnum PowerControlRequests
	{
		get
		{
			return _PowerControlRequests;
		}
		set
		{
			_PowerControlRequests = value;
		}
	}

	public SupportBitEnum ChannelQualityDrivenDataRate
	{
		get
		{
			return _ChannelQualityDrivenDataRate;
		}
		set
		{
			_ChannelQualityDrivenDataRate = value;
		}
	}

	public SupportBitEnum ScoLink
	{
		get
		{
			return _ScoLink;
		}
		set
		{
			_ScoLink = value;
		}
	}

	public SupportBitEnum Hv2Packets
	{
		get
		{
			return _Hv2Packets;
		}
		set
		{
			_Hv2Packets = value;
		}
	}

	public SupportBitEnum Hv3Packets
	{
		get
		{
			return _Hv3Packets;
		}
		set
		{
			_Hv3Packets = value;
		}
	}

	public SupportBitEnum ULawLogSynchronousData
	{
		get
		{
			return _ULawLogSynchronousData;
		}
		set
		{
			_ULawLogSynchronousData = value;
		}
	}

	public SupportBitEnum ALawLogSynchronousData
	{
		get
		{
			return _ALawLogSynchronousData;
		}
		set
		{
			_ALawLogSynchronousData = value;
		}
	}

	public SupportBitEnum CvsdSynchronousData
	{
		get
		{
			return _CvsdSynchronousData;
		}
		set
		{
			_CvsdSynchronousData = value;
		}
	}

	public SupportBitEnum PagingParameterNegotiation
	{
		get
		{
			return _PagingParameterNegotiation;
		}
		set
		{
			_PagingParameterNegotiation = value;
		}
	}

	public SupportBitEnum PowerControl
	{
		get
		{
			return _PowerControl;
		}
		set
		{
			_PowerControl = value;
		}
	}

	public SupportBitEnum TransparentSynchronousData
	{
		get
		{
			return _TransparentSynchronousData;
		}
		set
		{
			_TransparentSynchronousData = value;
		}
	}

	public FlowControlLagEnum FlowControlLag
	{
		get
		{
			return _FlowControlLag;
		}
		set
		{
			_FlowControlLag = value;
		}
	}

	public SupportBitEnum BroadcastEncryption
	{
		get
		{
			return _BroadcastEncryption;
		}
		set
		{
			_BroadcastEncryption = value;
		}
	}

	public SupportBitEnum EnhancedDataRateAcl2MbpsMode
	{
		get
		{
			return _EnhancedDataRateAcl2MbpsMode;
		}
		set
		{
			_EnhancedDataRateAcl2MbpsMode = value;
		}
	}

	public SupportBitEnum EnhancedDataRateAcl3MbpsMode
	{
		get
		{
			return _EnhancedDataRateAcl3MbpsMode;
		}
		set
		{
			_EnhancedDataRateAcl3MbpsMode = value;
		}
	}

	public SupportBitEnum EnhancedInquiryScan
	{
		get
		{
			return _EnhancedInquiryScan;
		}
		set
		{
			_EnhancedInquiryScan = value;
		}
	}

	public SupportBitEnum InterlacedInquiryScan
	{
		get
		{
			return _InterlacedInquiryScan;
		}
		set
		{
			_InterlacedInquiryScan = value;
		}
	}

	public SupportBitEnum InterlacedPageScan
	{
		get
		{
			return _InterlacedPageScan;
		}
		set
		{
			_InterlacedPageScan = value;
		}
	}

	public SupportBitEnum RssiWithInquiryResults
	{
		get
		{
			return _RssiWithInquiryResults;
		}
		set
		{
			_RssiWithInquiryResults = value;
		}
	}

	public SupportBitEnum ExtendedScoLinkEv3Packets
	{
		get
		{
			return _ExtendedScoLinkEv3Packets;
		}
		set
		{
			_ExtendedScoLinkEv3Packets = value;
		}
	}

	public SupportBitEnum Ev4Packets
	{
		get
		{
			return _Ev4Packets;
		}
		set
		{
			_Ev4Packets = value;
		}
	}

	public SupportBitEnum Ev5Packets
	{
		get
		{
			return _Ev5Packets;
		}
		set
		{
			_Ev5Packets = value;
		}
	}

	public SupportBitEnum AfhCapableSlave
	{
		get
		{
			return _AfhCapableSlave;
		}
		set
		{
			_AfhCapableSlave = value;
		}
	}

	public SupportBitEnum AfhClassificationSlave
	{
		get
		{
			return _AfhClassificationSlave;
		}
		set
		{
			_AfhClassificationSlave = value;
		}
	}

	public SupportBitEnum BrEdrNotSupported
	{
		get
		{
			return _BrEdrNotSupported;
		}
		set
		{
			_BrEdrNotSupported = value;
		}
	}

	public SupportBitEnum LeSupportedController
	{
		get
		{
			return _LeSupportedController;
		}
		set
		{
			_LeSupportedController = value;
		}
	}

	public SupportBitEnum ThreeSlotEnhancedDataRateAclPackets
	{
		get
		{
			return _ThreeSlotEnhancedDataRateAclPackets;
		}
		set
		{
			_ThreeSlotEnhancedDataRateAclPackets = value;
		}
	}

	public SupportBitEnum FiveSlotEnhancedDataRateAclPackets
	{
		get
		{
			return _FiveSlotEnhancedDataRateAclPackets;
		}
		set
		{
			_FiveSlotEnhancedDataRateAclPackets = value;
		}
	}

	public SupportBitEnum SniffSubrating
	{
		get
		{
			return _SniffSubrating;
		}
		set
		{
			_SniffSubrating = value;
		}
	}

	public SupportBitEnum PauseEncryption
	{
		get
		{
			return _PauseEncryption;
		}
		set
		{
			_PauseEncryption = value;
		}
	}

	public SupportBitEnum AfhCapableMaster
	{
		get
		{
			return _AfhCapableMaster;
		}
		set
		{
			_AfhCapableMaster = value;
		}
	}

	public SupportBitEnum AfhClassificationMaster
	{
		get
		{
			return _AfhClassificationMaster;
		}
		set
		{
			_AfhClassificationMaster = value;
		}
	}

	public SupportBitEnum EnhancedDataRateEsco2MbpsMode
	{
		get
		{
			return _EnhancedDataRateEsco2MbpsMode;
		}
		set
		{
			_EnhancedDataRateEsco2MbpsMode = value;
		}
	}

	public SupportBitEnum EnhancedDataRateEsco3MbpsMode
	{
		get
		{
			return _EnhancedDataRateEsco3MbpsMode;
		}
		set
		{
			_EnhancedDataRateEsco3MbpsMode = value;
		}
	}

	public SupportBitEnum ThreeSlotEnhancedDataRateEscoPackets
	{
		get
		{
			return _ThreeSlotEnhancedDataRateEscoPackets;
		}
		set
		{
			_ThreeSlotEnhancedDataRateEscoPackets = value;
		}
	}

	public SupportBitEnum ExtendedInquiryResponse
	{
		get
		{
			return _ExtendedInquiryResponse;
		}
		set
		{
			_ExtendedInquiryResponse = value;
		}
	}

	public SupportBitEnum SimultaneousLeAndBrEdrToSameDeviceCapableController
	{
		get
		{
			return _SimultaneousLeAndBrEdrToSameDeviceCapableController;
		}
		set
		{
			_SimultaneousLeAndBrEdrToSameDeviceCapableController = value;
		}
	}

	public SupportBitEnum SecureSimplePairing
	{
		get
		{
			return _SecureSimplePairing;
		}
		set
		{
			_SecureSimplePairing = value;
		}
	}

	public SupportBitEnum EncapsulatedPdu
	{
		get
		{
			return _EncapsulatedPdu;
		}
		set
		{
			_EncapsulatedPdu = value;
		}
	}

	public SupportBitEnum ErroneousDataReporting
	{
		get
		{
			return _ErroneousDataReporting;
		}
		set
		{
			_ErroneousDataReporting = value;
		}
	}

	public SupportBitEnum NonFlushablePacketBoundaryFlag
	{
		get
		{
			return _NonFlushablePacketBoundaryFlag;
		}
		set
		{
			_NonFlushablePacketBoundaryFlag = value;
		}
	}

	public SupportBitEnum LinkSupervisionTimeoutChangedEvent
	{
		get
		{
			return _LinkSupervisionTimeoutChangedEvent;
		}
		set
		{
			_LinkSupervisionTimeoutChangedEvent = value;
		}
	}

	public SupportBitEnum InquiryTxPowerLevel
	{
		get
		{
			return _InquiryTxPowerLevel;
		}
		set
		{
			_InquiryTxPowerLevel = value;
		}
	}

	public SupportBitEnum EnhancedPowerControl
	{
		get
		{
			return _EnhancedPowerControl;
		}
		set
		{
			_EnhancedPowerControl = value;
		}
	}

	public SupportBitEnum ExtendedFeatures
	{
		get
		{
			return _ExtendedFeatures;
		}
		set
		{
			_ExtendedFeatures = value;
		}
	}
}
