/*
 * Copyright (c) 2018 - present.  Boling Consulting Solutions (bcsw.net)
 * Copyright 2020-present Open Networking Foundation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/*
 * NOTE: This file was generated, manual edits will be overwritten!
 *
 * Generated by 'goCodeGenerator.py':
 *              https://github.com/cboling/OMCI-parser/README.md
 */

package generated

// ManagedEntityInfo provides ManagedEntity information
type ManagedEntityInfo struct {
	New func(params ...ParamData) (*ManagedEntity, error)
}

// ParamData can be passed to the 'New' function to dictate how the returned
// Managed Entity is created. You should supply either zero or one ParamData
// structure to 'New'.
//
// If No ParamData is passed, the returned Managed Entity can only be used for
// providing validation of other structures. This is commonly done in a packet
// encoder/decoder to assist in that process.
//
// If One ParamData is passed, the returned Managed Entity will be initialized
// with the given values/attributes and then validated. This is commonly done
// when you wish to create an ME for transmission, storage or removal from a
// persistent database, or some other similar purpose.
//
type ParamData struct {
	EntityID   uint16
	Attributes AttributeValueMap
}

// CreateME wraps a function that makes it a creator of a Managed Entity
type CreateME func(params ...ParamData) (*ManagedEntity, OmciErrors)

var classToManagedEntityMap map[ClassID]CreateME

func init() {
	// Create mapping of 16-bit managed entity class IDs to ME-type
	classToManagedEntityMap = make(map[ClassID]CreateME, 193)

	classToManagedEntityMap[2] = NewOnuData
	classToManagedEntityMap[5] = NewCardholder
	classToManagedEntityMap[6] = NewCircuitPack
	classToManagedEntityMap[7] = NewSoftwareImage
	classToManagedEntityMap[11] = NewPhysicalPathTerminationPointEthernetUni
	classToManagedEntityMap[12] = NewPhysicalPathTerminationPointCesUni
	classToManagedEntityMap[14] = NewInterworkingVccTerminationPoint
	classToManagedEntityMap[16] = NewAal5Profile
	classToManagedEntityMap[18] = NewAal5PerformanceMonitoringHistoryData
	classToManagedEntityMap[21] = NewCesServiceProfile
	classToManagedEntityMap[24] = NewEthernetPerformanceMonitoringHistoryData
	classToManagedEntityMap[45] = NewMacBridgeServiceProfile
	classToManagedEntityMap[46] = NewMacBridgeConfigurationData
	classToManagedEntityMap[47] = NewMacBridgePortConfigurationData
	classToManagedEntityMap[48] = NewMacBridgePortDesignationData
	classToManagedEntityMap[49] = NewMacBridgePortFilterTableData
	classToManagedEntityMap[50] = NewMacBridgePortBridgeTableData
	classToManagedEntityMap[51] = NewMacBridgePerformanceMonitoringHistoryData
	classToManagedEntityMap[52] = NewMacBridgePortPerformanceMonitoringHistoryData
	classToManagedEntityMap[53] = NewPhysicalPathTerminationPointPotsUni
	classToManagedEntityMap[58] = NewVoiceServiceProfile
	classToManagedEntityMap[62] = NewVpPerformanceMonitoringHistoryData
	classToManagedEntityMap[78] = NewVlanTaggingOperationConfigurationData
	classToManagedEntityMap[79] = NewMacBridgePortFilterPreAssignTable
	classToManagedEntityMap[82] = NewPhysicalPathTerminationPointVideoUni
	classToManagedEntityMap[83] = NewPhysicalPathTerminationPointLctUni
	classToManagedEntityMap[84] = NewVlanTaggingFilterData
	classToManagedEntityMap[89] = NewEthernetPerformanceMonitoringHistoryData2
	classToManagedEntityMap[90] = NewPhysicalPathTerminationPointVideoAni
	classToManagedEntityMap[98] = NewPhysicalPathTerminationPointXdslUniPart1
	classToManagedEntityMap[99] = NewPhysicalPathTerminationPointXdslUniPart2
	classToManagedEntityMap[100] = NewXdslLineInventoryAndStatusDataPart1
	classToManagedEntityMap[101] = NewXdslLineInventoryAndStatusDataPart2
	classToManagedEntityMap[102] = NewXdslChannelDownstreamStatusData
	classToManagedEntityMap[103] = NewXdslChannelUpstreamStatusData
	classToManagedEntityMap[105] = NewXdslLineConfigurationProfilePart2
	classToManagedEntityMap[106] = NewXdslLineConfigurationProfilePart3
	classToManagedEntityMap[107] = NewXdslChannelConfigurationProfile
	classToManagedEntityMap[108] = NewXdslSubcarrierMaskingDownstreamProfile
	classToManagedEntityMap[109] = NewXdslSubcarrierMaskingUpstreamProfile
	classToManagedEntityMap[110] = NewXdslPsdMaskProfile
	classToManagedEntityMap[111] = NewXdslDownstreamRfiBandsProfile
	classToManagedEntityMap[112] = NewXdslXtuCPerformanceMonitoringHistoryData
	classToManagedEntityMap[113] = NewXdslXtuRPerformanceMonitoringHistoryData
	classToManagedEntityMap[114] = NewXdslXtuCChannelPerformanceMonitoringHistoryData
	classToManagedEntityMap[115] = NewXdslXtuRChannelPerformanceMonitoringHistoryData
	classToManagedEntityMap[116] = NewTcAdaptorPerformanceMonitoringHistoryDataXdsl
	classToManagedEntityMap[130] = NewIeee8021PMapperServiceProfile
	classToManagedEntityMap[131] = NewOltG
	classToManagedEntityMap[133] = NewOnuPowerShedding
	classToManagedEntityMap[134] = NewIpHostConfigData
	classToManagedEntityMap[135] = NewIpHostPerformanceMonitoringHistoryData
	classToManagedEntityMap[136] = NewTcpUdpConfigData
	classToManagedEntityMap[137] = NewNetworkAddress
	classToManagedEntityMap[138] = NewVoipConfigData
	classToManagedEntityMap[139] = NewVoipVoiceCtp
	classToManagedEntityMap[140] = NewCallControlPerformanceMonitoringHistoryData
	classToManagedEntityMap[141] = NewVoipLineStatus
	classToManagedEntityMap[142] = NewVoipMediaProfile
	classToManagedEntityMap[143] = NewRtpProfileData
	classToManagedEntityMap[144] = NewRtpPerformanceMonitoringHistoryData
	classToManagedEntityMap[145] = NewNetworkDialPlanTable
	classToManagedEntityMap[146] = NewVoipApplicationServiceProfile
	classToManagedEntityMap[147] = NewVoipFeatureAccessCodes
	classToManagedEntityMap[148] = NewAuthenticationSecurityMethod
	classToManagedEntityMap[149] = NewSipConfigPortal
	classToManagedEntityMap[150] = NewSipAgentConfigData
	classToManagedEntityMap[151] = NewSipAgentPerformanceMonitoringHistoryData
	classToManagedEntityMap[152] = NewSipCallInitiationPerformanceMonitoringHistoryData
	classToManagedEntityMap[153] = NewSipUserData
	classToManagedEntityMap[154] = NewMgcConfigPortal
	classToManagedEntityMap[155] = NewMgcConfigData
	classToManagedEntityMap[156] = NewMgcPerformanceMonitoringHistoryData
	classToManagedEntityMap[157] = NewLargeString
	classToManagedEntityMap[158] = NewOnuRemoteDebug
	classToManagedEntityMap[160] = NewEquipmentExtensionPackage
	classToManagedEntityMap[162] = NewPhysicalPathTerminationPointMocaUni
	classToManagedEntityMap[163] = NewMocaEthernetPerformanceMonitoringHistoryData
	classToManagedEntityMap[164] = NewMocaInterfacePerformanceMonitoringHistoryData
	classToManagedEntityMap[165] = NewVdsl2LineConfigurationExtensions
	classToManagedEntityMap[168] = NewVdsl2LineInventoryAndStatusDataPart1
	classToManagedEntityMap[169] = NewVdsl2LineInventoryAndStatusDataPart2
	classToManagedEntityMap[170] = NewVdsl2LineInventoryAndStatusDataPart3
	classToManagedEntityMap[171] = NewExtendedVlanTaggingOperationConfigurationData
	classToManagedEntityMap[256] = NewOnuG
	classToManagedEntityMap[257] = NewOnu2G
	classToManagedEntityMap[262] = NewTCont
	classToManagedEntityMap[263] = NewAniG
	classToManagedEntityMap[264] = NewUniG
	classToManagedEntityMap[266] = NewGemInterworkingTerminationPoint
	classToManagedEntityMap[268] = NewGemPortNetworkCtp
	classToManagedEntityMap[269] = NewVpNetworkCtp
	classToManagedEntityMap[272] = NewGalEthernetProfile
	classToManagedEntityMap[273] = NewThresholdData1
	classToManagedEntityMap[274] = NewThresholdData2
	classToManagedEntityMap[276] = NewGalEthernetPerformanceMonitoringHistoryData
	classToManagedEntityMap[277] = NewPriorityQueue
	classToManagedEntityMap[278] = NewTrafficScheduler
	classToManagedEntityMap[280] = NewTrafficDescriptor
	classToManagedEntityMap[281] = NewMulticastGemInterworkingTerminationPoint
	classToManagedEntityMap[282] = NewPseudowireTerminationPoint
	classToManagedEntityMap[283] = NewRtpPseudowireParameters
	classToManagedEntityMap[284] = NewPseudowireMaintenanceProfile
	classToManagedEntityMap[285] = NewPseudowirePerformanceMonitoringHistoryData
	classToManagedEntityMap[286] = NewEthernetFlowTerminationPoint
	classToManagedEntityMap[287] = NewOmci
	classToManagedEntityMap[288] = NewManagedEntityMe
	classToManagedEntityMap[289] = NewAttributeMe
	classToManagedEntityMap[290] = NewDot1XPortExtensionPackage
	classToManagedEntityMap[291] = NewDot1XConfigurationProfile
	classToManagedEntityMap[292] = NewDot1XPerformanceMonitoringHistoryData
	classToManagedEntityMap[293] = NewRadiusPerformanceMonitoringHistoryData
	classToManagedEntityMap[296] = NewEthernetPerformanceMonitoringHistoryData3
	classToManagedEntityMap[298] = NewDot1RateLimiter
	classToManagedEntityMap[299] = NewDot1AgMaintenanceDomain
	classToManagedEntityMap[300] = NewDot1AgMaintenanceAssociation
	classToManagedEntityMap[301] = NewDot1AgDefaultMdLevel
	classToManagedEntityMap[302] = NewDot1AgMep
	classToManagedEntityMap[305] = NewDot1AgCfmStack
	classToManagedEntityMap[306] = NewDot1AgChassisManagementInfo
	classToManagedEntityMap[307] = NewOctetString
	classToManagedEntityMap[308] = NewGeneralPurposeBuffer
	classToManagedEntityMap[309] = NewMulticastOperationsProfile
	classToManagedEntityMap[310] = NewMulticastSubscriberConfigInfo
	classToManagedEntityMap[311] = NewMulticastSubscriberMonitor
	classToManagedEntityMap[312] = NewFecPerformanceMonitoringHistoryData
	classToManagedEntityMap[313] = NewReAniG
	classToManagedEntityMap[314] = NewPhysicalPathTerminationPointReUni
	classToManagedEntityMap[315] = NewReUpstreamAmplifier
	classToManagedEntityMap[316] = NewReDownstreamAmplifier
	classToManagedEntityMap[321] = NewEthernetFramePerformanceMonitoringHistoryDataDownstream
	classToManagedEntityMap[322] = NewEthernetFramePerformanceMonitoringHistoryDataUpstream
	classToManagedEntityMap[323] = NewVdsl2LineConfigurationExtensions2
	classToManagedEntityMap[324] = NewXdslImpulseNoiseMonitorPerformanceMonitoringHistoryData
	classToManagedEntityMap[325] = NewXdslLineInventoryAndStatusDataPart5
	classToManagedEntityMap[328] = NewReCommonAmplifierParameters
	classToManagedEntityMap[329] = NewVirtualEthernetInterfacePoint
	classToManagedEntityMap[332] = NewEnhancedSecurityControl
	classToManagedEntityMap[333] = NewMplsPseudowireTerminationPoint
	classToManagedEntityMap[334] = NewEthernetFrameExtendedPm
	classToManagedEntityMap[335] = NewSnmpConfigurationData
	classToManagedEntityMap[336] = NewOnuDynamicPowerManagementControl
	classToManagedEntityMap[337] = NewPwAtmConfigurationData
	classToManagedEntityMap[338] = NewPwAtmPerformanceMonitoringHistoryData
	classToManagedEntityMap[339] = NewPwEthernetConfigurationData
	classToManagedEntityMap[340] = NewBbfTr069ManagementServer
	classToManagedEntityMap[341] = NewGemPortNetworkCtpPerformanceMonitoringHistoryData
	classToManagedEntityMap[342] = NewTcpUdpPerformanceMonitoringHistoryData
	classToManagedEntityMap[343] = NewEnergyConsumptionPerformanceMonitoringHistoryData
	classToManagedEntityMap[344] = NewXgPonTcPerformanceMonitoringHistoryData
	classToManagedEntityMap[345] = NewXgPonDownstreamManagementPerformanceMonitoringHistoryData
	classToManagedEntityMap[346] = NewXgPonUpstreamManagementPerformanceMonitoringHistoryData
	classToManagedEntityMap[348] = NewMacBridgePortIcmpv6ProcessPreAssignTable
	classToManagedEntityMap[400] = NewEthernetPseudowireParameters
	classToManagedEntityMap[406] = NewEponDownstreamPerformanceMonitoringConfiguration
	classToManagedEntityMap[407] = NewSipAgentConfigData2
	classToManagedEntityMap[408] = NewXdslXtuCPerformanceMonitoringHistoryDataPart2
	classToManagedEntityMap[410] = NewVdsl2LineConfigurationExtensions3
	classToManagedEntityMap[412] = NewXdslChannelConfigurationProfilePart2
	classToManagedEntityMap[413] = NewXtuDataGatheringConfiguration
	classToManagedEntityMap[414] = NewXdslLineInventoryAndStatusDataPart8
	classToManagedEntityMap[415] = NewVdsl2LineInventoryAndStatusDataPart4
	classToManagedEntityMap[418] = NewEfmBondingGroup
	classToManagedEntityMap[419] = NewEfmBondingLink
	classToManagedEntityMap[420] = NewEfmBondingGroupPerformanceMonitoringHistoryData
	classToManagedEntityMap[421] = NewEfmBondingGroupPerformanceMonitoringHistoryDataPart2
	classToManagedEntityMap[422] = NewEfmBondingLinkPerformanceMonitoringHistoryData
	classToManagedEntityMap[423] = NewEfmBondingPortPerformanceMonitoringHistoryData
	classToManagedEntityMap[424] = NewEfmBondingPortPerformanceMonitoringHistoryDataPart2
	classToManagedEntityMap[425] = NewEthernetFrameExtendedPm64Bit
	classToManagedEntityMap[427] = NewPhysicalPathTerminationPointXdslUniPart3
	classToManagedEntityMap[432] = NewFastChannelConfigurationProfile
	classToManagedEntityMap[433] = NewFastDataPathConfigurationProfile
	classToManagedEntityMap[434] = NewFastVectoringLineConfigurationExtensions
	classToManagedEntityMap[436] = NewFastLineInventoryAndStatusDataPart2
	classToManagedEntityMap[437] = NewFastXtuCPerformanceMonitoringHistoryData
	classToManagedEntityMap[438] = NewFastXtuRPerformanceMonitoringHistoryData
	classToManagedEntityMap[440] = NewTimeStatusMessage
	classToManagedEntityMap[441] = NewOnu3G
	classToManagedEntityMap[443] = NewTwdmChannelManagedEntity
	classToManagedEntityMap[444] = NewTwdmChannelPhyLodsPerformanceMonitoringHistoryData
	classToManagedEntityMap[445] = NewTwdmChannelXgemPerformanceMonitoringHistoryData
	classToManagedEntityMap[446] = NewTwdmChannelPloamPerformanceMonitoringHistoryDataPart1
	classToManagedEntityMap[447] = NewTwdmChannelPloamPerformanceMonitoringHistoryDataPart2
	classToManagedEntityMap[448] = NewTwdmChannelPloamPerformanceMonitoringHistoryDataPart3
	classToManagedEntityMap[449] = NewTwdmChannelTuningPerformanceMonitoringHistoryDataPart1
	classToManagedEntityMap[450] = NewTwdmChannelTuningPerformanceMonitoringHistoryDataPart2
	classToManagedEntityMap[451] = NewTwdmChannelTuningPerformanceMonitoringHistoryDataPart3
	classToManagedEntityMap[452] = NewTwdmChannelOmciPerformanceMonitoringHistoryData
	classToManagedEntityMap[453] = NewEnhancedFecPerformanceMonitoringHistoryData
	classToManagedEntityMap[454] = NewEnhancedTcPerformanceMonitoringHistoryData
	classToManagedEntityMap[456] = NewOnuManufacturingData
	classToManagedEntityMap[457] = NewOnuTimeConfiguration
}

// LoadManagedEntityDefinition returns a function to create a Managed Entity for a specific
// Managed Entity class ID
func LoadManagedEntityDefinition(classID ClassID, params ...ParamData) (*ManagedEntity, OmciErrors) {
	if newFunc, ok := classToManagedEntityMap[classID]; ok {
		return newFunc(params...)
	}
	if IsVendorSpecificClassID(classID) {
		return NewUnknownVendorSpecificME(classID, params...)
	}
	return NewUnknownG988ME(classID, params...)
}

// GetSupportedClassIDs returns an array of Managed Entity Class IDs supported
func GetSupportedClassIDs() []ClassID {
	supported := make([]ClassID, 0, len(classToManagedEntityMap))
	for k := range classToManagedEntityMap {
		supported = append(supported, k)
	}
	return supported
}

// GetAttributesDefinitions returns the attribute definition map for a specific class
func GetAttributesDefinitions(classID ClassID) (AttributeDefinitionMap, OmciErrors) {
	medef, err := LoadManagedEntityDefinition(classID)
	if err.StatusCode() != Success {
		return nil, err
	}
	return medef.GetAttributeDefinitions(), err
}

// IsVendorSpecificClassID returns true if the provided class ID is reserved in ITU-T G.988
// for vendor specific functionality
func IsVendorSpecificClassID(classID ClassID) bool {
	// Values below are from Table 11.2.4-1 of ITU-T G.988 (11/2017)
	return (ClassID(240) <= classID && classID <= ClassID(255)) ||
		(ClassID(350) <= classID && classID <= ClassID(399)) ||
		(ClassID(65280) <= classID && classID <= ClassID(65535))
}

// IsUnknownClassID returns true if the provided class ID is reserved in ITU-T G.988
// for vendor specific functionality or is not decoded/supported by this library
func IsUnknownClassID(classID ClassID) bool {
	if _, err := LoadManagedEntityDefinition(classID); err != nil {
		return false
	}
	return true
}
