package iace

import "time"

// builtinHazardsMachineSafety returns hazard library entries covering
// mechanical, environmental and machine safety hazards.
func builtinHazardsMachineSafety() []HazardLibraryEntry {
	now := time.Now()
	return []HazardLibraryEntry{
		// Category: mechanical_hazard (6 entries)
		// ====================================================================
		{
			ID:                       hazardUUID("mechanical_hazard", 1),
			Category:                 "mechanical_hazard",
			Name:                     "Unerwarteter Anlauf nach Spannungsausfall",
			Description:              "Nach Wiederkehr der Versorgungsspannung laeuft die Maschine unerwartet an, ohne dass eine Startfreigabe durch den Bediener erfolgt ist.",
			DefaultSeverity:          5,
			DefaultProbability:       3,
			ApplicableComponentTypes: []string{"controller", "firmware"},
			RegulationReferences:     []string{"Maschinenverordnung 2023/1230 Anhang I §1.2.6", "ISO 13849"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Anlaufschutz", "Anti-Restart-Funktion", "Sicherheitsrelais"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("mechanical_hazard", 2),
			Category:                 "mechanical_hazard",
			Name:                     "Restenergie nach Abschalten",
			Description:              "Gespeicherte kinetische oder potentielle Energie (z.B. Schwungmasse, abgesenktes Werkzeug) wird nach dem Abschalten nicht sicher abgebaut.",
			DefaultSeverity:          5,
			DefaultProbability:       2,
			ApplicableComponentTypes: []string{"actuator", "controller"},
			RegulationReferences:     []string{"Maschinenverordnung 2023/1230 Anhang I §1.6", "ISO 13849"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Energieabbau-Prozedur", "Mechanische Haltevorrichtung", "LOTO-Freischaltung"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("mechanical_hazard", 3),
			Category:                 "mechanical_hazard",
			Name:                     "Unerwartete Maschinenbewegung",
			Description:              "Die Maschine fuehrt eine unkontrollierte Bewegung durch (z.B. Antrieb faehrt ohne Kommando los), was Personen im Gefahrenbereich verletzt.",
			DefaultSeverity:          5,
			DefaultProbability:       2,
			ApplicableComponentTypes: []string{"actuator", "controller", "software"},
			RegulationReferences:     []string{"Maschinenverordnung 2023/1230", "ISO 13849", "IEC 62061"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Safe Torque Off (STO)", "Geschwindigkeitsueberwachung", "Schutzzaun-Sensorik"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("mechanical_hazard", 4),
			Category:                 "mechanical_hazard",
			Name:                     "Teileauswurf durch Fehlfunktion",
			Description:              "Werkzeuge, Werkstuecke oder Maschinenteile werden bei einer Fehlfunktion unkontrolliert aus der Maschine geschleudert.",
			DefaultSeverity:          5,
			DefaultProbability:       2,
			ApplicableComponentTypes: []string{"actuator", "controller"},
			RegulationReferences:     []string{"Maschinenverordnung 2023/1230 Anhang I §1.3.2"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Trennende Schutzeinrichtung", "Sicherheitsglas", "Spannkraft-Ueberwachung"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("mechanical_hazard", 5),
			Category:                 "mechanical_hazard",
			Name:                     "Quetschstelle durch fehlende Schutzeinrichtung",
			Description:              "Zwischen beweglichen und festen Maschinenteilen entstehen Quetschstellen, die bei fehlendem Schutz zu schweren Verletzungen fuehren koennen.",
			DefaultSeverity:          5,
			DefaultProbability:       2,
			ApplicableComponentTypes: []string{"actuator"},
			RegulationReferences:     []string{"Maschinenverordnung 2023/1230 Anhang I §1.3.7", "ISO 13857"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Schutzverkleidung", "Sicherheitsabstaende nach ISO 13857", "Lichtvorhang"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("mechanical_hazard", 6),
			Category:                 "mechanical_hazard",
			Name:                     "Instabile Struktur unter Last",
			Description:              "Die Maschinenstruktur oder ein Anbauteil versagt unter statischer oder dynamischer Belastung und gefaehrdet Personen in der Naehe.",
			DefaultSeverity:          5,
			DefaultProbability:       1,
			ApplicableComponentTypes: []string{"other"},
			RegulationReferences:     []string{"Maschinenverordnung 2023/1230 Anhang I §1.3.1"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Festigkeitsberechnung", "Ueberlastsicherung", "Regelmaessige Inspektion"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},

		// ====================================================================
		// Category: electrical_hazard (6 entries)
		// ====================================================================
		{
			ID:                       hazardUUID("electrical_hazard", 1),
			Category:                 "electrical_hazard",
			Name:                     "Elektrischer Schlag an Bedienpanel",
			Description:              "Bediener kommen mit spannungsfuehrenden Teilen in Beruehrung, z.B. durch defekte Gehaeuseerdung oder fehlerhafte Isolierung.",
			DefaultSeverity:          5,
			DefaultProbability:       2,
			ApplicableComponentTypes: []string{"hmi", "controller"},
			RegulationReferences:     []string{"Niederspannungsrichtlinie 2014/35/EU", "IEC 60204-1"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Schutzkleinspannung (SELV)", "Schutzerdung", "Isolationsmonitoring"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("electrical_hazard", 2),
			Category:                 "electrical_hazard",
			Name:                     "Lichtbogen durch Schaltfehler",
			Description:              "Ein Schaltfehler erzeugt einen Lichtbogen, der Bediener verletzen, Geraete beschaedigen oder einen Brand ausloesen kann.",
			DefaultSeverity:          5,
			DefaultProbability:       1,
			ApplicableComponentTypes: []string{"controller"},
			RegulationReferences:     []string{"Niederspannungsrichtlinie 2014/35/EU", "IEC 60204-1"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Lichtbogenschutz-Schalter", "Kurzschlussschutz", "Geeignete Schaltgeraete"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("electrical_hazard", 3),
			Category:                 "electrical_hazard",
			Name:                     "Kurzschluss durch Isolationsfehler",
			Description:              "Beschaedigte Kabelisolierungen fuehren zu einem Kurzschluss, der Feuer ausloesen oder Sicherheitsfunktionen ausser Betrieb setzen kann.",
			DefaultSeverity:          4,
			DefaultProbability:       2,
			ApplicableComponentTypes: []string{"network", "controller"},
			RegulationReferences:     []string{"Niederspannungsrichtlinie 2014/35/EU", "IEC 60204-1"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Isolationsueberwachung", "Kabelschutz", "Regelmaessige Sichtpruefung"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("electrical_hazard", 4),
			Category:                 "electrical_hazard",
			Name:                     "Erdschluss in Steuerkreis",
			Description:              "Ein Erdschluss im Steuerkreis kann unbeabsichtigte Schaltzustaende ausloesen und Sicherheitsfunktionen beeinflussen.",
			DefaultSeverity:          4,
			DefaultProbability:       2,
			ApplicableComponentTypes: []string{"controller", "network"},
			RegulationReferences:     []string{"IEC 60204-1", "ISO 13849"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Erdschluss-Monitoring", "IT-Netz fuer Steuerkreise", "Regelmaessige Pruefung"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("electrical_hazard", 5),
			Category:                 "electrical_hazard",
			Name:                     "Gespeicherte Energie in Kondensatoren",
			Description:              "Nach dem Abschalten verbleiben hohe Spannungen in Kondensatoren (z.B. Frequenzumrichter, USV), was bei Wartungsarbeiten gefaehrlich ist.",
			DefaultSeverity:          5,
			DefaultProbability:       2,
			ApplicableComponentTypes: []string{"controller"},
			RegulationReferences:     []string{"Niederspannungsrichtlinie 2014/35/EU", "IEC 60204-1"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Entladewartezeit", "Automatische Entladeschaltung", "Warnhinweise am Geraet"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("electrical_hazard", 6),
			Category:                 "electrical_hazard",
			Name:                     "Elektromagnetische Kopplung auf Safety-Leitung",
			Description:              "Hochfrequente Stoerfelder koppeln auf ungeschirmte Safety-Leitungen und erzeugen Falschsignale, die Sicherheitsfunktionen fehl ausloesen.",
			DefaultSeverity:          3,
			DefaultProbability:       3,
			ApplicableComponentTypes: []string{"network", "sensor"},
			RegulationReferences:     []string{"EMV-Richtlinie 2014/30/EU", "IEC 62061"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Geschirmte Kabel", "Raeumliche Trennung", "EMV-Pruefung"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},

		// ====================================================================
		// Category: thermal_hazard (4 entries)
		// ====================================================================
		{
			ID:                       hazardUUID("thermal_hazard", 1),
			Category:                 "thermal_hazard",
			Name:                     "Ueberhitzung der Steuereinheit",
			Description:              "Die Steuereinheit ueberschreitet die zulaessige Betriebstemperatur durch Lueftungsausfall oder hohe Umgebungstemperatur, was zu Fehlfunktionen fuehrt.",
			DefaultSeverity:          3,
			DefaultProbability:       3,
			ApplicableComponentTypes: []string{"controller", "firmware"},
			RegulationReferences:     []string{"Maschinenverordnung 2023/1230", "IEC 60068"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Temperaturueberwachung", "Redundante Lueftung", "Thermisches Abschalten"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("thermal_hazard", 2),
			Category:                 "thermal_hazard",
			Name:                     "Brandgefahr durch Leistungselektronik",
			Description:              "Defekte Leistungshalbleiter oder Kondensatoren in der Leistungselektronik erwaermen sich unkontrolliert und koennen einen Brand ausloesen.",
			DefaultSeverity:          5,
			DefaultProbability:       2,
			ApplicableComponentTypes: []string{"controller"},
			RegulationReferences:     []string{"Niederspannungsrichtlinie 2014/35/EU", "IEC 60204-1"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Thermosicherungen", "Temperatursensoren", "Brandschutzmassnahmen"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("thermal_hazard", 3),
			Category:                 "thermal_hazard",
			Name:                     "Einfrieren bei Tieftemperatur",
			Description:              "Sehr tiefe Umgebungstemperaturen fuehren zum Einfrieren von Hydraulikleitungen oder Elektronik und damit zum Ausfall von Sicherheitsfunktionen.",
			DefaultSeverity:          3,
			DefaultProbability:       3,
			ApplicableComponentTypes: []string{"controller", "actuator"},
			RegulationReferences:     []string{"Maschinenverordnung 2023/1230", "IEC 60068"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Heizung", "Mindestbetriebstemperatur definieren", "Temperatursensor"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("thermal_hazard", 4),
			Category:                 "thermal_hazard",
			Name:                     "Waermestress an Kabelisolierung",
			Description:              "Langfristige Einwirkung hoher Temperaturen auf Kabelisolierungen fuehrt zu Alterung und Isolationsversagen mit Kurzschlussrisiko.",
			DefaultSeverity:          3,
			DefaultProbability:       3,
			ApplicableComponentTypes: []string{"network", "controller"},
			RegulationReferences:     []string{"IEC 60204-1", "Maschinenverordnung 2023/1230"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Hitzebestaendige Kabel (z.B. PTFE)", "Kabelverlegung mit Abstand zur Waermequelle", "Regelmaessige Inspektion"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},

		// ====================================================================
		// Category: emc_hazard (5 entries)
		// ====================================================================
		{
			ID:                       hazardUUID("emc_hazard", 1),
			Category:                 "emc_hazard",
			Name:                     "EMV-Stoerabstrahlung auf Safety-Bus",
			Description:              "Hohe elektromagnetische Stoerabstrahlung aus benachbarten Geraeten stoert den industriellen Safety-Bus (z.B. PROFIsafe) und erzeugt Kommunikationsfehler.",
			DefaultSeverity:          5,
			DefaultProbability:       2,
			ApplicableComponentTypes: []string{"network", "controller"},
			RegulationReferences:     []string{"EMV-Richtlinie 2014/30/EU", "IEC 62061", "IEC 61784-3"},
			SuggestedMitigations:     mustMarshalJSON([]string{"EMV-gerechte Verkabelung", "Schirmung", "EMC-Pruefung nach EN 55011"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("emc_hazard", 2),
			Category:                 "emc_hazard",
			Name:                     "Unbeabsichtigte elektromagnetische Abstrahlung",
			Description:              "Die Maschine selbst strahlt starke EM-Felder ab, die andere sicherheitsrelevante Einrichtungen in der Naehe stoeren.",
			DefaultSeverity:          2,
			DefaultProbability:       3,
			ApplicableComponentTypes: []string{"controller", "actuator"},
			RegulationReferences:     []string{"EMV-Richtlinie 2014/30/EU"},
			SuggestedMitigations:     mustMarshalJSON([]string{"EMV-Filter", "Gehaeuseabschirmung", "CE-Zulassung Frequenzumrichter"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("emc_hazard", 3),
			Category:                 "emc_hazard",
			Name:                     "Frequenzumrichter-Stoerung auf Steuerleitung",
			Description:              "Der Frequenzumrichter erzeugt hochfrequente Stoerungen, die auf benachbarte Steuerleitungen koppeln und falsche Signale erzeugen.",
			DefaultSeverity:          4,
			DefaultProbability:       3,
			ApplicableComponentTypes: []string{"actuator", "network"},
			RegulationReferences:     []string{"EMV-Richtlinie 2014/30/EU", "IEC 60204-1"},
			SuggestedMitigations:     mustMarshalJSON([]string{"Motorfilter", "Kabeltrennabstand", "Separate Kabelkanaele"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("emc_hazard", 4),
			Category:                 "emc_hazard",
			Name:                     "ESD-Schaden an Elektronik",
			Description:              "Elektrostatische Entladung bei Wartung oder Austausch beschaedigt empfindliche Elektronikbauteile, was zu latenten Fehlfunktionen fuehrt.",
			DefaultSeverity:          3,
			DefaultProbability:       3,
			ApplicableComponentTypes: []string{"controller", "firmware"},
			RegulationReferences:     []string{"IEC 61000-4-2", "Maschinenverordnung 2023/1230"},
			SuggestedMitigations:     mustMarshalJSON([]string{"ESD-Schulung", "ESD-Schutzausruestung", "ESD-gerechte Verpackung"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
		{
			ID:                       hazardUUID("emc_hazard", 5),
			Category:                 "emc_hazard",
			Name:                     "HF-Stoerung des Sicherheitssensors",
			Description:              "Hochfrequenz-Stoerquellen (z.B. Schweissgeraete, Mobiltelefone) beeinflussen die Funktion von Sicherheitssensoren (Lichtvorhang, Scanner).",
			DefaultSeverity:          4,
			DefaultProbability:       3,
			ApplicableComponentTypes: []string{"sensor"},
			RegulationReferences:     []string{"EMV-Richtlinie 2014/30/EU", "IEC 61496"},
			SuggestedMitigations:     mustMarshalJSON([]string{"EMV-zertifizierte Sicherheitssensoren", "HF-Quellen trennen", "Gegensprechanlagenverbot in Gefahrenzone"}),
			IsBuiltin:                true,
			TenantID:                 nil,
			CreatedAt:                now,
		},
	}
}
