package redfishprofile

func genericProfile() Profile {
	return staticProfile{
		name:            "generic",
		priority:        100,
		safeForFallback: true,
		matchFn:         func(MatchSignals) int { return 10 },
		extendAcquisition: func(plan *AcquisitionPlan, _ MatchSignals) {
			ensurePrefetchPolicy(plan, AcquisitionPrefetchPolicy{
				IncludeSuffixes: []string{
					"/Bios",
					"/Processors",
					"/Memory",
					"/Storage",
					"/SimpleStorage",
					"/PCIeDevices",
					"/PCIeFunctions",
					"/Accelerators",
					"/GraphicsControllers",
					"/EthernetInterfaces",
					"/NetworkInterfaces",
					"/NetworkAdapters",
					"/Drives",
					"/Power",
					"/PowerSubsystem/PowerSupplies",
					"/NetworkProtocol",
					"/UpdateService",
					"/UpdateService/FirmwareInventory",
				},
				ExcludeContains: []string{
					"/Fabrics",
					"/Backplanes",
					"/Boards",
					"/Assembly",
					"/Sensors",
					"/ThresholdSensors",
					"/DiscreteSensors",
					"/ThermalConfig",
					"/ThermalSubsystem",
					"/EnvironmentMetrics",
					"/Certificates",
					"/LogServices",
				},
			})
			ensureScopedPathPolicy(plan, AcquisitionScopedPathPolicy{
				SystemCriticalSuffixes: []string{
					"/Bios",
					"/Oem/Public",
					"/Oem/Public/FRU",
					"/Processors",
					"/Memory",
					"/Storage",
					"/PCIeDevices",
					"/PCIeFunctions",
					"/Accelerators",
					"/GraphicsControllers",
					"/EthernetInterfaces",
					"/NetworkInterfaces",
					"/SimpleStorage",
					"/Storage/IntelVROC",
					"/Storage/IntelVROC/Drives",
					"/Storage/IntelVROC/Volumes",
				},
				ChassisCriticalSuffixes: []string{
					"/Oem/Public",
					"/Oem/Public/FRU",
					"/Power",
					"/NetworkAdapters",
					"/PCIeDevices",
					"/Accelerators",
					"/Drives",
					"/Assembly",
				},
				ManagerCriticalSuffixes: []string{
					"/NetworkProtocol",
				},
				SystemSeedSuffixes: []string{
					"/SimpleStorage",
					"/Storage/IntelVROC",
					"/Storage/IntelVROC/Drives",
					"/Storage/IntelVROC/Volumes",
				},
			})
			addPlanPaths(&plan.CriticalPaths,
				"/redfish/v1/UpdateService",
				"/redfish/v1/UpdateService/FirmwareInventory",
			)
			ensureSnapshotMaxDocuments(plan, 100000)
			ensureSnapshotWorkers(plan, 6)
			ensurePrefetchWorkers(plan, 4)
			ensureETABaseline(plan, AcquisitionETABaseline{
				DiscoverySeconds:     8,
				SnapshotSeconds:      90,
				PrefetchSeconds:      20,
				CriticalPlanBSeconds: 20,
				ProfilePlanBSeconds:  15,
			})
			ensurePostProbePolicy(plan, AcquisitionPostProbePolicy{
				EnableNumericCollectionProbe: true,
			})
			ensureRecoveryPolicy(plan, AcquisitionRecoveryPolicy{
				EnableCriticalCollectionMemberRetry: true,
				EnableCriticalSlowProbe:             true,
				EnableEmptyCriticalCollectionRetry:  true,
			})
			ensureRatePolicy(plan, AcquisitionRatePolicy{
				TargetP95LatencyMS:      900,
				ThrottleP95LatencyMS:    1800,
				MinSnapshotWorkers:      2,
				MinPrefetchWorkers:      1,
				DisablePrefetchOnErrors: true,
			})
		},
	}
}
