package iace

// ============================================================================
// Section type constants
// ============================================================================

const (
	SectionRiskAssessmentReport  = "risk_assessment_report"
	SectionHazardLogCombined     = "hazard_log_combined"
	SectionGeneralDescription    = "general_description"
	SectionEssentialRequirements = "essential_requirements"
	SectionDesignSpecifications  = "design_specifications"
	SectionTestReports           = "test_reports"
	SectionStandardsApplied      = "standards_applied"
	SectionDeclarationConformity = "declaration_of_conformity"
	SectionAIIntendedPurpose     = "ai_intended_purpose"
	SectionAIModelDescription    = "ai_model_description"
	SectionAIRiskManagement      = "ai_risk_management"
	SectionAIHumanOversight      = "ai_human_oversight"
	SectionComponentList         = "component_list"
	SectionClassificationReport  = "classification_report"
	SectionMitigationReport      = "mitigation_report"
	SectionVerificationReport    = "verification_report"
	SectionEvidenceIndex         = "evidence_index"
	SectionInstructionsForUse    = "instructions_for_use"
	SectionMonitoringPlan        = "monitoring_plan"
	SectionAssemblyDeclaration   = "assembly_declaration"
)

// ============================================================================
// System prompts (German — CE compliance context)
// ============================================================================

var sectionSystemPrompts = map[string]string{
	SectionRiskAssessmentReport: `Du bist CE-Experte fuer Maschinen- und KI-Sicherheit. Erstelle eine strukturierte Zusammenfassung der Risikobeurteilung gemaess ISO 12100 und EN ISO 13849. Gliederung: 1) Methodik, 2) Risikoueberblick (Anzahl Gefaehrdungen nach Risikostufe), 3) Kritische Risiken, 4) Akzeptanzbewertung, 5) Empfehlungen. Verwende Fachterminologie und beziehe dich auf die konkreten Projektdaten.`,

	SectionHazardLogCombined: `Erstelle ein tabellarisches Gefaehrdungsprotokoll (Hazard Log) fuer die technische Dokumentation. Jede Gefaehrdung soll enthalten: ID, Bezeichnung, Kategorie, Lebenszyklusphase, Szenario, Schwere, Eintrittswahrscheinlichkeit, Risikolevel, Massnahmen und Status. Formatiere als strukturierte Tabelle in Markdown.`,

	SectionGeneralDescription: `Erstelle eine allgemeine Maschinenbeschreibung fuer die technische Dokumentation gemaess EU-Maschinenverordnung 2023/1230 Anhang IV. Beschreibe: 1) Bestimmungsgemaesse Verwendung, 2) Aufbau und Funktion, 3) Systemkomponenten, 4) Betriebsbedingungen, 5) Schnittstellen. Verwende die bereitgestellten Projektdaten.`,

	SectionEssentialRequirements: `Beschreibe die anwendbaren grundlegenden Anforderungen (Essential Health and Safety Requirements — EHSR) gemaess EU-Maschinenverordnung 2023/1230 Anhang III. Ordne jede Anforderung den relevanten Gefaehrdungen und Massnahmen zu. Beruecksichtige auch AI Act und CRA Anforderungen falls KI-Komponenten vorhanden sind.`,

	SectionDesignSpecifications: `Erstelle eine Uebersicht der Konstruktionsdaten und Spezifikationen fuer die technische Dokumentation. Enthalten sein sollen: 1) Systemarchitektur, 2) Komponentenliste mit Sicherheitsrelevanz, 3) Software-/Firmware-Versionen, 4) Schnittstellenbeschreibungen, 5) Sicherheitsfunktionen. Beziehe dich auf die konkreten Komponenten.`,

	SectionTestReports: `Erstelle eine Zusammenfassung der Pruefberichte und Verifikationsergebnisse. Gliederung: 1) Durchgefuehrte Pruefungen, 2) Pruefmethoden (Test, Analyse, Inspektion), 3) Ergebnisse pro Massnahme, 4) Offene Punkte, 5) Gesamtbewertung. Referenziere die konkreten Mitigationsmassnahmen und deren Verifikationsstatus.`,

	SectionStandardsApplied: `Liste die angewandten harmonisierten Normen und technischen Spezifikationen auf. Ordne jede Norm den relevanten Anforderungen und Gefaehrdungskategorien zu. Beruecksichtige: ISO 12100, ISO 13849, IEC 62443, ISO/IEC 27001, sowie branchenspezifische Normen. Erklaere die Vermutungswirkung (Presumption of Conformity).`,

	SectionDeclarationConformity: `Erstelle eine EU-Konformitaetserklaerung nach EU-Maschinenverordnung 2023/1230 Anhang IV. Enthalten sein muessen: 1) Hersteller-Angaben, 2) Produktidentifikation, 3) Angewandte Richtlinien und Verordnungen, 4) Angewandte Normen, 5) Bevollmaechtigter, 6) Ort, Datum, Unterschrift. Formales Dokument-Layout.`,

	SectionAIIntendedPurpose: `Beschreibe den bestimmungsgemaessen Zweck des KI-Systems gemaess AI Act Art. 13 (Transparenzpflichten). Enthalten sein sollen: 1) Zweckbestimmung, 2) Einsatzbereich und -grenzen, 3) Zielgruppe, 4) Vorhersehbarer Fehlgebrauch, 5) Leistungskennzahlen, 6) Einschraenkungen und bekannte Risiken.`,

	SectionAIModelDescription: `Beschreibe das KI-Modell, die Trainingsdaten und die Architektur gemaess AI Act Anhang IV. Enthalten: 1) Modelltyp und Architektur, 2) Trainingsdaten (Herkunft, Umfang, Qualitaet), 3) Validierungsmethodik, 4) Leistungsmetriken, 5) Bekannte Verzerrungen (Bias), 6) Energie-/Ressourcenverbrauch.`,

	SectionAIRiskManagement: `Erstelle eine Beschreibung des KI-Risikomanagementsystems gemaess AI Act Art. 9. Gliederung: 1) Risikomanagement-Prozess, 2) Identifizierte Risiken fuer Gesundheit/Sicherheit/Grundrechte, 3) Risikomindernde Massnahmen, 4) Restrisiken, 5) Ueberwachungs- und Aktualisierungsverfahren.`,

	SectionAIHumanOversight: `Beschreibe die Massnahmen zur menschlichen Aufsicht (Human Oversight) gemaess AI Act Art. 14. Enthalten: 1) Aufsichtskonzept, 2) Rollen und Verantwortlichkeiten, 3) Eingriffsmoglichkeiten, 4) Uebersteuern/Abschalten, 5) Schulungsanforderungen, 6) Informationspflichten an Nutzer.`,

	SectionComponentList: `Erstelle eine detaillierte Komponentenliste fuer die technische Dokumentation. Pro Komponente: Name, Typ, Version, Beschreibung, Sicherheitsrelevanz, Vernetzungsstatus. Kennzeichne sicherheitsrelevante und vernetzte Komponenten besonders. Gruppiere nach Komponententyp.`,

	SectionClassificationReport: `Erstelle einen Klassifizierungsbericht, der die regulatorische Einordnung des Produkts zusammenfasst. Pro Verordnung (MVO, AI Act, CRA, NIS2): Klassifizierungsergebnis, Risikoklasse, Begruendung, daraus resultierende Anforderungen. Bewerte die Gesamtkonformitaetslage.`,

	SectionMitigationReport: `Erstelle einen Massnahmenbericht (Mitigation Report) fuer die technische Dokumentation. Gliederung nach 3-Stufen-Methode: 1) Inhaerent sichere Konstruktion (Design), 2) Technische Schutzmassnahmen (Protective), 3) Benutzerinformation (Information). Pro Massnahme: Status, Verifikation, zugeordnete Gefaehrdung.`,

	SectionVerificationReport: `Erstelle einen Verifikationsbericht ueber alle durchgefuehrten Pruef- und Nachweisverfahren. Enthalten: 1) Verifikationsplan-Uebersicht, 2) Durchgefuehrte Pruefungen nach Methode, 3) Ergebnisse und Bewertung, 4) Offene Verifikationen, 5) Gesamtstatus der Konformitaetsnachweise.`,

	SectionEvidenceIndex: `Erstelle ein Nachweisverzeichnis (Evidence Index) fuer die technische Dokumentation. Liste alle vorhandenen Nachweisdokumente auf: Dateiname, Beschreibung, zugeordnete Massnahme, Dokumenttyp. Identifiziere fehlende Nachweise und empfehle Ergaenzungen.`,

	SectionInstructionsForUse: `Erstelle eine Gliederung fuer die Betriebsanleitung gemaess EU-Maschinenverordnung 2023/1230 Anhang III Abschnitt 1.7.4. Enthalten: 1) Bestimmungsgemaesse Verwendung, 2) Inbetriebnahme, 3) Sicherer Betrieb, 4) Wartung, 5) Restrisiken und Warnhinweise, 6) Ausserbetriebnahme. Beruecksichtige identifizierte Gefaehrdungen.`,

	SectionMonitoringPlan: `Erstelle einen Post-Market-Monitoring-Plan fuer das Produkt. Enthalten: 1) Ueberwachungsziele, 2) Datenquellen (Kundenfeedback, Vorfaelle, Updates), 3) Ueberwachungsintervalle, 4) Eskalationsverfahren, 5) Dokumentationspflichten, 6) Verantwortlichkeiten. Beruecksichtige AI Act Art. 72 (Post-Market Monitoring) falls KI-Komponenten vorhanden.`,

	SectionAssemblyDeclaration: `Erstelle eine Einbauerklaerung gemaess EU-Maschinenverordnung 2023/1230 Anhang IV.9 fuer eine unvollstaendige Maschine. Enthalten: 1) Hersteller-Angaben, 2) Bezeichnung der unvollstaendigen Maschine, 3) Erklaerung, dass die Inbetriebnahme untersagt ist bis die Gesamtmaschine konform erklaert wurde, 4) Liste der eingehaltenen Anforderungen, 5) Angaben zur technischen Dokumentation. Falls die Maschine vollstaendig ist, vermerke "Nicht zutreffend — vollstaendige Maschine".`,
}

// ============================================================================
// RAG query mapping
// ============================================================================

func buildRAGQuery(sectionType string) string {
	ragQueries := map[string]string{
		SectionRiskAssessmentReport:  "Risikobeurteilung ISO 12100 Risikobewertung Maschine Gefaehrdungsanalyse",
		SectionHazardLogCombined:     "Gefaehrdungsprotokoll Hazard Log Risikoanalyse Gefaehrdungsidentifikation",
		SectionGeneralDescription:    "Maschinenbeschreibung technische Dokumentation bestimmungsgemaesse Verwendung",
		SectionEssentialRequirements: "grundlegende Anforderungen EHSR Maschinenverordnung Anhang III Sicherheitsanforderungen",
		SectionDesignSpecifications:  "Konstruktionsdaten Spezifikationen Systemarchitektur technische Dokumentation",
		SectionTestReports:           "Pruefberichte Verifikation Validierung Konformitaetsbewertung Testberichte",
		SectionStandardsApplied:      "harmonisierte Normen ISO 12100 ISO 13849 IEC 62443 Vermutungswirkung",
		SectionDeclarationConformity: "EU-Konformitaetserklaerung Maschinenverordnung 2023/1230 Anhang IV CE-Kennzeichnung",
		SectionAIIntendedPurpose:     "bestimmungsgemaesser Zweck KI-System AI Act Art. 13 Transparenz Intended Purpose",
		SectionAIModelDescription:    "KI-Modell Trainingsdaten Architektur AI Act Anhang IV technische Dokumentation",
		SectionAIRiskManagement:      "KI-Risikomanagementsystem AI Act Art. 9 Risikomanagement kuenstliche Intelligenz",
		SectionAIHumanOversight:      "menschliche Aufsicht Human Oversight AI Act Art. 14 Kontrolle KI-System",
		SectionComponentList:         "Komponentenliste Systemkomponenten sicherheitsrelevante Bauteile technische Dokumentation",
		SectionClassificationReport:  "regulatorische Klassifizierung Risikoklasse AI Act CRA Maschinenverordnung",
		SectionMitigationReport:      "Risikomindernde Massnahmen 3-Stufen-Methode ISO 12100 Schutzmassnahmen",
		SectionVerificationReport:    "Verifikation Validierung Pruefnachweis Konformitaetsbewertung Pruefprotokoll",
		SectionEvidenceIndex:         "Nachweisdokumente Evidence Konformitaetsnachweis Dokumentenindex",
		SectionInstructionsForUse:    "Betriebsanleitung Benutzerinformation Maschinenverordnung Abschnitt 1.7.4 Sicherheitshinweise",
		SectionMonitoringPlan:        "Post-Market-Monitoring Ueberwachungsplan AI Act Art. 72 Marktbeobachtung",
		SectionAssemblyDeclaration:   "Einbauerklaerung unvollstaendige Maschine Maschinenverordnung Anhang IV",
	}

	if q, ok := ragQueries[sectionType]; ok {
		return q
	}
	return "CE-Konformitaet technische Dokumentation Maschinenverordnung AI Act"
}

// getSystemPrompt returns the system prompt for a given section type.
func getSystemPrompt(sectionType string) string {
	if prompt, ok := sectionSystemPrompts[sectionType]; ok {
		return prompt
	}
	return "Du bist CE-Experte fuer technische Dokumentation. Erstelle den angeforderten Abschnitt der technischen Dokumentation basierend auf den bereitgestellten Projektdaten. Schreibe auf Deutsch, verwende Fachterminologie und beziehe dich auf die konkreten Daten."
}

// sectionDisplayName returns a human-readable name for a section type.
func sectionDisplayName(sectionType string) string {
	names := map[string]string{
		SectionRiskAssessmentReport:  "Zusammenfassung der Risikobeurteilung",
		SectionHazardLogCombined:     "Gefaehrdungsprotokoll (Hazard Log)",
		SectionGeneralDescription:    "Allgemeine Maschinenbeschreibung",
		SectionEssentialRequirements: "Grundlegende Anforderungen (EHSR)",
		SectionDesignSpecifications:  "Konstruktionsdaten und Spezifikationen",
		SectionTestReports:           "Pruefberichte",
		SectionStandardsApplied:      "Angewandte Normen",
		SectionDeclarationConformity: "EU-Konformitaetserklaerung",
		SectionAIIntendedPurpose:     "Bestimmungsgemaesser Zweck (KI)",
		SectionAIModelDescription:    "KI-Modellbeschreibung",
		SectionAIRiskManagement:      "KI-Risikomanagementsystem",
		SectionAIHumanOversight:      "Menschliche Aufsicht (Human Oversight)",
		SectionComponentList:         "Komponentenliste",
		SectionClassificationReport:  "Klassifizierungsbericht",
		SectionMitigationReport:      "Massnahmenbericht",
		SectionVerificationReport:    "Verifikationsbericht",
		SectionEvidenceIndex:         "Nachweisverzeichnis",
		SectionInstructionsForUse:    "Betriebsanleitung (Gliederung)",
		SectionMonitoringPlan:        "Post-Market-Monitoring-Plan",
		SectionAssemblyDeclaration:   "Einbauerklaerung",
	}
	if name, ok := names[sectionType]; ok {
		return name
	}
	return sectionType
}
