package iace

import "time"

// builtinHazardsConfigIntegration returns hazard library entries for
// configuration errors, logging/audit failures, and integration errors.
func builtinHazardsConfigIntegration() []HazardLibraryEntry {
	now := time.Now()

	return []HazardLibraryEntry{
		// ====================================================================
		// Category: configuration_error (8 entries)
		// ====================================================================
		{
			ID:                       hazardUUID("configuration_error", 1),
			Category:                 "configuration_error",
			Name:                     "Falscher Safety-Parameter bei Inbetriebnahme",
			Description:              "Beim Einrichten werden sicherheitsrelevante Parameter (z.B. Maximalgeschwindigkeit, Abschaltgrenzen) falsch konfiguriert und nicht verifiziert.",
			DefaultSeverity:          5,
			DefaultProbability:       3,
			ApplicableComponentTypes: []string{"software", "firmware", "controller"},
			RegulationReferences:     []string{"Maschinenverordnung 2023/1230", "ISO 13849", "IEC 62061"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Parameterpruefung nach Inbetriebnahme", "4-Augen-Prinzip", "Parameterprotokoll in technischer Akte"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("configuration_error", 2),
			Category:                 "configuration_error",
			Name:                     "Factory Reset loescht Sicherheitskonfiguration",
			Description:              "Ein Factory Reset setzt alle Parameter auf Werkseinstellungen zurueck, einschliesslich sicherheitsrelevanter Konfigurationen, ohne Warnung.",
			DefaultSeverity:          5,
			DefaultProbability:       2,
			ApplicableComponentTypes: []string{"firmware", "software"},
			RegulationReferences:     []string{"IEC 62304", "CRA", "Maschinenverordnung 2023/1230"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Separate Safety-Partition", "Bestaetigung vor Reset", "Safety-Config vor Reset sichern"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("configuration_error", 3),
			Category:                 "configuration_error",
			Name:                     "Fehlerhafte Parameter-Migration bei Update",
			Description:              "Beim Software-Update werden vorhandene Konfigurationsparameter nicht korrekt in das neue Format migriert, was zu falschen Systemeinstellungen fuehrt.",
			DefaultSeverity:          5,
			DefaultProbability:       2,
			ApplicableComponentTypes: []string{"software", "firmware"},
			RegulationReferences:     []string{"IEC 62304", "CRA"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Migrations-Skript-Tests", "Konfig-Backup vor Update", "Post-Update-Verifikation"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("configuration_error", 4),
			Category:                 "configuration_error",
			Name:                     "Konflikthafte redundante Einstellungen",
			Description:              "Widersprüchliche Parameter in verschiedenen Konfigurationsdateien oder -ebenen fuehren zu unvorhersehbarem Systemverhalten.",
			DefaultSeverity:          4,
			DefaultProbability:       3,
			ApplicableComponentTypes: []string{"software", "firmware"},
			RegulationReferences:     []string{"IEC 62304", "Maschinenverordnung 2023/1230"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Konfig-Validierung beim Start", "Einzelne Quelle fuer Safety-Params", "Konsistenzpruefung"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("configuration_error", 5),
			Category:                 "configuration_error",
			Name:                     "Hard-coded Credentials in Konfiguration",
			Description:              "Passwörter oder Schluessel sind fest im Code oder in Konfigurationsdateien hinterlegt und koennen nicht geaendert werden.",
			DefaultSeverity:          4,
			DefaultProbability:       2,
			ApplicableComponentTypes: []string{"software", "firmware"},
			RegulationReferences:     []string{"CRA", "IEC 62443"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Secrets-Management", "Kein Hard-Coding", "Credential-Scan im CI"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("configuration_error", 6),
			Category:                 "configuration_error",
			Name:                     "Debug-Modus in Produktionsumgebung aktiv",
			Description:              "Debug-Schnittstellen oder erhoehte Logging-Level sind in der Produktionsumgebung aktiv und ermoeglichen Angreifern Zugang zu sensiblen Systeminfos.",
			DefaultSeverity:          4,
			DefaultProbability:       2,
			ApplicableComponentTypes: []string{"software", "firmware"},
			RegulationReferences:     []string{"CRA", "IEC 62443"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Build-Konfiguration pruefe Debug-Flag", "Produktions-Checkliste", "Debug-Port-Deaktivierung"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("configuration_error", 7),
			Category:                 "configuration_error",
			Name:                     "Out-of-Bounds-Eingabe ohne Validierung",
			Description:              "Nutzereingaben oder Schnittstellendaten werden ohne Bereichspruefung in sicherheitsrelevante Parameter uebernommen.",
			DefaultSeverity:          4,
			DefaultProbability:       3,
			ApplicableComponentTypes: []string{"software", "hmi"},
			RegulationReferences:     []string{"IEC 62304", "Maschinenverordnung 2023/1230"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Eingabevalidierung", "Bereichsgrenzen definieren", "Sanity-Check"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("configuration_error", 8),
			Category:                 "configuration_error",
			Name:                     "Konfigurationsdatei nicht schreibgeschuetzt",
			Description:              "Sicherheitsrelevante Konfigurationsdateien koennen von unautorisierten Nutzern oder Prozessen veraendert werden.",
			DefaultSeverity:          4,
			DefaultProbability:       3,
			ApplicableComponentTypes: []string{"software", "firmware"},
			RegulationReferences:     []string{"IEC 62443", "CRA"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Dateisystem-Berechtigungen", "Code-Signing fuer Konfig", "Integritaetspruefung"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},

		// ====================================================================
		// Category: logging_audit_failure (5 entries)
		// ====================================================================
		{
			ID:                       hazardUUID("logging_audit_failure", 1),
			Category:                 "logging_audit_failure",
			Name:                     "Safety-Events nicht protokolliert",
			Description:              "Sicherheitsrelevante Ereignisse (Alarme, Not-Halt-Betaetigungen, Fehlerzustaende) werden nicht in ein Protokoll geschrieben.",
			DefaultSeverity:          4,
			DefaultProbability:       3,
			ApplicableComponentTypes: []string{"software", "controller"},
			RegulationReferences:     []string{"Maschinenverordnung 2023/1230", "IEC 62443", "CRA"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Pflicht-Logging Safety-Events", "Unveraenderliches Audit-Log", "Log-Integritaetspruefung"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("logging_audit_failure", 2),
			Category:                 "logging_audit_failure",
			Name:                     "Log-Manipulation moeglich",
			Description:              "Authentifizierte Benutzer oder Angreifer koennen Protokolleintraege aendern oder loeschen und so Beweise fuer Sicherheitsvorfaelle vernichten.",
			DefaultSeverity:          4,
			DefaultProbability:       2,
			ApplicableComponentTypes: []string{"software"},
			RegulationReferences:     []string{"CRA", "IEC 62443"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Write-Once-Speicher", "Kryptografische Signaturen", "Externes Log-Management"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("logging_audit_failure", 3),
			Category:                 "logging_audit_failure",
			Name:                     "Log-Overflow ueberschreibt alte Eintraege",
			Description:              "Wenn der Log-Speicher voll ist, werden aeltere Eintraege ohne Warnung ueberschrieben, was eine lueckenlose Rueckverfolgung verhindert.",
			DefaultSeverity:          3,
			DefaultProbability:       4,
			ApplicableComponentTypes: []string{"software", "controller"},
			RegulationReferences:     []string{"CRA", "IEC 62443"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Log-Kapazitaetsalarm", "Externes Log-System", "Zirkulaerpuffer mit Warnschwelle"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("logging_audit_failure", 4),
			Category:                 "logging_audit_failure",
			Name:                     "Fehlende Zeitstempel in Protokolleintraegen",
			Description:              "Log-Eintraege enthalten keine oder ungenaue Zeitstempel, was die zeitliche Rekonstruktion von Ereignissen bei der Fehlersuche verhindert.",
			DefaultSeverity:          3,
			DefaultProbability:       3,
			ApplicableComponentTypes: []string{"software", "controller"},
			RegulationReferences:     []string{"CRA", "Maschinenverordnung 2023/1230"},
			SuggestedMitigations:     mustMarshalJSON([]string{"NTP-Synchronisation", "RTC im Geraet", "ISO-8601-Zeitstempel"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("logging_audit_failure", 5),
			Category:                 "logging_audit_failure",
			Name:                     "Audit-Trail loeschbar durch Bediener",
			Description:              "Der Audit-Trail kann von einem normalen Bediener geloescht werden, was die Nachvollziehbarkeit von Sicherheitsereignissen untergaebt.",
			DefaultSeverity:          4,
			DefaultProbability:       2,
			ApplicableComponentTypes: []string{"software"},
			RegulationReferences:     []string{"CRA", "IEC 62443", "Maschinenverordnung 2023/1230"},
			SuggestedMitigations:     mustMarshalJSON([]string{"RBAC: Nur Admin darf loeschen", "Log-Export vor Loeschung", "Unanderbare Log-Speicherung"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},

		// ====================================================================
		// Category: integration_error (8 entries)
		// ====================================================================
		{
			ID:                       hazardUUID("integration_error", 1),
			Category:                 "integration_error",
			Name:                     "Datentyp-Mismatch an Schnittstelle",
			Description:              "Zwei Systeme tauschen Daten ueber eine Schnittstelle aus, die inkompatible Datentypen verwendet, was zu Interpretationsfehlern fuehrt.",
			DefaultSeverity:          4,
			DefaultProbability:       3,
			ApplicableComponentTypes: []string{"software", "network"},
			RegulationReferences:     []string{"IEC 62304", "IEC 62443"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Schnittstellendefinition (IDL/Protobuf)", "Integrationstests", "Datentypvalidierung"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("integration_error", 2),
			Category:                 "integration_error",
			Name:                     "Endianness-Fehler bei Datenuebertragung",
			Description:              "Big-Endian- und Little-Endian-Systeme kommunizieren ohne Byte-Order-Konvertierung, was zu falsch interpretierten numerischen Werten fuehrt.",
			DefaultSeverity:          4,
			DefaultProbability:       3,
			ApplicableComponentTypes: []string{"software", "network"},
			RegulationReferences:     []string{"IEC 62304", "IEC 62443"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Explizite Byte-Order-Definiton", "Integrationstests", "Schnittstellenspezifikation"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("integration_error", 3),
			Category:                 "integration_error",
			Name:                     "Protokoll-Versions-Konflikt",
			Description:              "Sender und Empfaenger verwenden unterschiedliche Protokollversionen, die nicht rueckwaertskompatibel sind, was zu Paketablehnung oder Fehlinterpretation fuehrt.",
			DefaultSeverity:          4,
			DefaultProbability:       3,
			ApplicableComponentTypes: []string{"software", "network", "firmware"},
			RegulationReferences:     []string{"IEC 62443", "CRA"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Versions-Aushandlung beim Verbindungsaufbau", "Backward-Compatibilitaet", "Kompatibilitaets-Matrix"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("integration_error", 4),
			Category:                 "integration_error",
			Name:                     "Timeout nicht behandelt bei Kommunikation",
			Description:              "Eine Kommunikationsverbindung bricht ab oder antwortet nicht, der Sender erkennt dies nicht und wartet unendlich lang.",
			DefaultSeverity:          4,
			DefaultProbability:       3,
			ApplicableComponentTypes: []string{"software", "network"},
			RegulationReferences:     []string{"IEC 62443", "Maschinenverordnung 2023/1230"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Timeout-Konfiguration", "Watchdog-Timer", "Fail-Safe bei Verbindungsverlust"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("integration_error", 5),
			Category:                 "integration_error",
			Name:                     "Buffer Overflow an Schnittstelle",
			Description:              "Eine Schnittstelle akzeptiert Eingaben, die groesser als der zugewiesene Puffer sind, was zu Speicher-Ueberschreibung und Kontrollfluss-Manipulation fuehrt.",
			DefaultSeverity:          5,
			DefaultProbability:       2,
			ApplicableComponentTypes: []string{"software", "firmware", "network"},
			RegulationReferences:     []string{"CRA", "IEC 62443", "IEC 62304"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Laengenvalidierung", "Sichere Puffer-Funktionen", "Statische Analyse (z.B. MISRA)"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("integration_error", 6),
			Category:                 "integration_error",
			Name:                     "Fehlender Heartbeat bei Safety-Verbindung",
			Description:              "Eine Safety-Kommunikationsverbindung sendet keinen periodischen Heartbeat, so dass ein stiller Ausfall (z.B. unterbrochenes Kabel) nicht erkannt wird.",
			DefaultSeverity:          5,
			DefaultProbability:       2,
			ApplicableComponentTypes: []string{"network", "software"},
			RegulationReferences:     []string{"IEC 61784-3", "ISO 13849", "IEC 62061"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Heartbeat-Protokoll", "Verbindungsueberwachung", "Safe-State bei Heartbeat-Ausfall"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("integration_error", 7),
			Category:                 "integration_error",
			Name:                     "Falscher Skalierungsfaktor bei Sensordaten",
			Description:              "Sensordaten werden mit einem falschen Faktor skaliert, was zu signifikant fehlerhaften Messwerten und moeglichen Fehlentscheidungen fuehrt.",
			DefaultSeverity:          4,
			DefaultProbability:       3,
			ApplicableComponentTypes: []string{"sensor", "software"},
			RegulationReferences:     []string{"Maschinenverordnung 2023/1230", "IEC 62304"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Kalibrierungspruefung", "Plausibilitaetstest", "Schnittstellendokumentation"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("integration_error", 8),
			Category:                 "integration_error",
			Name:                     "Einheitenfehler (mm vs. inch)",
			Description:              "Unterschiedliche Masseinheiten zwischen Systemen fuehren zu fehlerhaften Bewegungsbefehlen oder Werkzeugpositionierungen.",
			DefaultSeverity:          4,
			DefaultProbability:       3,
			ApplicableComponentTypes: []string{"software", "hmi"},
			RegulationReferences:     []string{"Maschinenverordnung 2023/1230", "IEC 62304"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Explizite Einheitendefinition", "Einheitenkonvertierung in der Schnittstelle", "Integrationstests"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
	}
}
