/**
 * Compliance Scope Engine - Type Definitions
 *
 * Definiert alle Typen für das Compliance-Tiefenbestimmungssystem.
 * Ermöglicht die Bestimmung des optimalen Compliance-Levels (L1-L4) basierend auf
 * Risiko, Komplexität und Assurance-Bedarf einer Organisation.
 */

// ============================================================================
// Core Level Types
// ============================================================================

/**
 * Compliance-Tiefenstufen
 * - L1: Lean Startup - Minimalansatz für kleine Organisationen
 * - L2: KMU Standard - Standard-Compliance für mittelständische Unternehmen
 * - L3: Erweitert - Erweiterte Compliance für größere/risikoreichere Organisationen
 * - L4: Zertifizierungsbereit - Vollständige Compliance für Zertifizierungen
 */
export type ComplianceDepthLevel = 'L1' | 'L2' | 'L3' | 'L4';

/**
 * Compliance-Scores zur Bestimmung der optimalen Tiefe
 * Alle Werte zwischen 0-100
 */
export interface ComplianceScores {
  /** Risiko-Score (0-100): Höhere Werte = höheres Risiko */
  risk_score: number;
  /** Komplexitäts-Score (0-100): Höhere Werte = komplexere Verarbeitung */
  complexity_score: number;
  /** Assurance-Bedarf (0-100): Höhere Werte = höherer Nachweis-/Zertifizierungsbedarf */
  assurance_need: number;
  /** Zusammengesetzter Score (0-100): Gewichtete Kombination aller Scores */
  composite_score: number;
}

// ============================================================================
// Question & Profiling Types
// ============================================================================

/**
 * IDs der Fragenblöcke für das Scope-Profiling
 */
export type ScopeQuestionBlockId =
  | 'organisation'        // Organisation & Reife
  | 'data'                // Daten & Betroffene
  | 'processing'          // Verarbeitung & Zweck
  | 'tech'                // Technik & Hosting
  | 'processes'           // Rechte & Prozesse
  | 'product';            // Produktkontext

/**
 * Eine einzelne Frage im Scope-Profiling
 */
export interface ScopeProfilingQuestion {
  /** Eindeutige ID der Frage */
  id: string;
  /** Fragetext */
  question: string;
  /** Optional: Hilfetext/Erklärung */
  helpText?: string;
  /** Antworttyp */
  type: 'single' | 'multi' | 'boolean' | 'number' | 'text';
  /** Antwortoptionen (für single/multi) */
  options?: Array<{ value: string; label: string }>;
  /** Ist die Frage erforderlich? */
  required: boolean;
  /** Gewichtung für Score-Berechnung */
  scoreWeights?: {
    risk?: number;      // Einfluss auf Risiko-Score
    complexity?: number; // Einfluss auf Komplexitäts-Score
    assurance?: number;  // Einfluss auf Assurance-Bedarf
  };
  /** Mapping zu Firmenprofil-Feldern */
  mapsToCompanyProfile?: string;
  /** Mapping zu VVT-Fragen */
  mapsToVVTQuestion?: string;
  /** Mapping zu LF-Fragen */
  mapsToLFQuestion?: string;
  /** Mapping zu TOM-Profil */
  mapsToTOMProfile?: string;
}

/**
 * Antwort auf eine Profiling-Frage
 */
export interface ScopeProfilingAnswer {
  /** ID der beantworteten Frage */
  questionId: string;
  /** Antwortwert (Typ abhängig von Fragentyp) */
  value: string | string[] | boolean | number;
}

/**
 * Ein Block von zusammengehörigen Fragen
 */
export interface ScopeQuestionBlock {
  /** Block-ID */
  id: ScopeQuestionBlockId;
  /** Block-Titel */
  title: string;
  /** Block-Beschreibung */
  description: string;
  /** Reihenfolge des Blocks */
  order: number;
  /** Fragen in diesem Block */
  questions: ScopeProfilingQuestion[];
}

// ============================================================================
// Hard Trigger Types
// ============================================================================

/**
 * Bedingungsoperatoren für Hard Trigger
 */
export type HardTriggerOperator =
  | 'EQUALS'          // Exakte Übereinstimmung
  | 'CONTAINS'        // Enthält (für Arrays/Strings)
  | 'IN'              // Ist in Liste enthalten
  | 'GREATER_THAN'    // Größer als (numerisch)
  | 'NOT_EQUALS';     // Ungleich

/**
 * Hard Trigger Regel - erzwingt Mindest-Compliance-Level
 */
export interface HardTriggerRule {
  /** Eindeutige ID der Regel */
  id: string;
  /** Kurze Bezeichnung */
  label: string;
  /** Detaillierte Beschreibung */
  description: string;
  /** Feld, das geprüft wird (questionId oder company_profile Feld) */
  conditionField: string;
  /** Bedingungsoperator */
  conditionOperator: HardTriggerOperator;
  /** Wert, der geprüft wird */
  conditionValue: unknown;
  /** Minimal erforderliches Level */
  minimumLevel: ComplianceDepthLevel;
  /** Pflichtdokumente bei Trigger */
  mandatoryDocuments: ScopeDocumentType[];
  /** DSFA erforderlich? */
  dsfaRequired: boolean;
  /** Rechtsgrundlage */
  legalReference: string;
}

/**
 * Getriggerter Hard Trigger mit Kontext
 */
export interface TriggeredHardTrigger {
  /** Die getriggerte Regel */
  rule: HardTriggerRule;
  /** Der tatsächlich gefundene Wert */
  matchedValue: unknown;
  /** Erklärung warum getriggert */
  explanation: string;
}

// ============================================================================
// Document Types
// ============================================================================

/**
 * Alle verfügbaren Dokumenttypen im SDK
 */
export type ScopeDocumentType =
  | 'vvt'                    // Verzeichnis von Verarbeitungstätigkeiten
  | 'lf'                     // Löschfristenkonzept
  | 'tom'                    // Technische und organisatorische Maßnahmen
  | 'av_vertrag'             // Auftragsverarbeitungsvertrag
  | 'dsi'                    // Datenschutz-Informationen (Privacy Policy)
  | 'betroffenenrechte'      // Betroffenenrechte-Prozess
  | 'dsfa'                   // Datenschutz-Folgenabschätzung
  | 'daten_transfer'         // Drittlandtransfer-Dokumentation
  | 'datenpannen'            // Datenpannen-Prozess
  | 'einwilligung'           // Einwilligungsmanagement
  | 'vertragsmanagement'     // Vertragsmanagement-Prozess
  | 'schulung'               // Mitarbeiterschulung
  | 'audit_log'              // Audit & Logging Konzept
  | 'risikoanalyse'          // Risikoanalyse
  | 'notfallplan'            // Notfall- & Krisenplan
  | 'zertifizierung'         // Zertifizierungsvorbereitung
  | 'datenschutzmanagement'; // Datenschutzmanagement-System (DSMS)

// ============================================================================
// Decision & Output Types
// ============================================================================

/**
 * Die finale Scope-Entscheidung mit allen Details
 */
export interface ScopeDecision {
  /** Eindeutige ID dieser Entscheidung */
  id: string;
  /** Bestimmtes Compliance-Level */
  determinedLevel: ComplianceDepthLevel;
  /** Berechnete Scores */
  scores: ComplianceScores;
  /** Getriggerte Hard Trigger */
  triggeredHardTriggers: TriggeredHardTrigger[];
  /** Erforderliche Dokumente mit Details */
  requiredDocuments: RequiredDocument[];
  /** Identifizierte Risiko-Flags */
  riskFlags: RiskFlag[];
  /** Identifizierte Lücken */
  gaps: ScopeGap[];
  /** Empfohlene nächste Schritte */
  nextActions: NextAction[];
  /** Begründung der Entscheidung */
  reasoning: ScopeReasoning[];
  /** Zeitstempel Erstellung */
  createdAt: string;
  /** Zeitstempel letzte Änderung */
  updatedAt: string;
}

/**
 * Erforderliches Dokument mit Detailtiefe
 */
export interface RequiredDocument {
  /** Dokumenttyp */
  documentType: ScopeDocumentType;
  /** Anzeigename */
  label: string;
  /** Ist Pflicht? */
  required: boolean;
  /** Erforderliche Tiefe (z.B. "Basis", "Standard", "Detailliert") */
  depth: string;
  /** Konkrete Anforderungen/Inhalte */
  detailItems: string[];
  /** Geschätzter Aufwand */
  estimatedEffort: string;
  /** Von welchen Triggern/Regeln gefordert */
  triggeredBy: string[];
  /** Link zum SDK-Schritt */
  sdkStepUrl?: string;
}

/**
 * Risiko-Flag
 */
export interface RiskFlag {
  /** Eindeutige ID */
  id: string;
  /** Schweregrad */
  severity: 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL';
  /** Titel */
  title: string;
  /** Beschreibung */
  description: string;
  /** Rechtsgrundlage */
  legalReference?: string;
  /** Empfehlung zur Behebung */
  recommendation: string;
}

/**
 * Identifizierte Lücke in der Compliance
 */
export interface ScopeGap {
  /** Eindeutige ID */
  id: string;
  /** Schweregrad */
  severity: 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL';
  /** Titel */
  title: string;
  /** Beschreibung */
  description: string;
  /** Empfehlung zur Schließung */
  recommendation: string;
  /** Betroffene Dokumente */
  relatedDocuments: ScopeDocumentType[];
}

/**
 * Nächster empfohlener Schritt
 */
export interface NextAction {
  /** Eindeutige ID */
  id: string;
  /** Priorität (1 = höchste) */
  priority: number;
  /** Titel */
  title: string;
  /** Beschreibung */
  description: string;
  /** Geschätzter Aufwand */
  estimatedEffort: string;
  /** Betroffene Dokumente */
  relatedDocuments: ScopeDocumentType[];
  /** Link zum SDK-Schritt */
  sdkStepUrl?: string;
}

/**
 * Begründungsschritt für die Entscheidung
 */
export interface ScopeReasoning {
  /** Schritt-Nummer/ID */
  step: string;
  /** Kurzbeschreibung */
  description: string;
  /** Detaillierte Punkte */
  details: string[];
}

// ============================================================================
// Document Scope Requirements
// ============================================================================

/**
 * Anforderungen an ein Dokument pro Level
 */
export interface DocumentDepthRequirement {
  /** Ist auf diesem Level erforderlich? */
  required: boolean;
  /** Tiefenbezeichnung */
  depth: string;
  /** Konkrete Anforderungen */
  detailItems: string[];
  /** Geschätzter Aufwand */
  estimatedEffort: string;
}

/**
 * Vollständige Scope-Anforderungen für ein Dokument
 */
export interface DocumentScopeRequirement {
  /** L1 Anforderungen */
  L1: DocumentDepthRequirement;
  /** L2 Anforderungen */
  L2: DocumentDepthRequirement;
  /** L3 Anforderungen */
  L3: DocumentDepthRequirement;
  /** L4 Anforderungen */
  L4: DocumentDepthRequirement;
}

// ============================================================================
// State Management Types
// ============================================================================

/**
 * Gesamter Zustand des Compliance Scope
 */
export interface ComplianceScopeState {
  /** Alle gegebenen Antworten */
  answers: ScopeProfilingAnswer[];
  /** Aktuelle Entscheidung (null wenn noch nicht berechnet) */
  decision: ScopeDecision | null;
  /** Zeitpunkt der letzten Evaluierung */
  lastEvaluatedAt: string | null;
  /** Sind alle Pflichtfragen beantwortet? */
  isComplete: boolean;
}

// ============================================================================
// Constants - Labels & Descriptions
// ============================================================================

/**
 * Deutsche Bezeichnungen für Compliance-Levels
 */
export const DEPTH_LEVEL_LABELS: Record<ComplianceDepthLevel, string> = {
  L1: 'Lean Startup',
  L2: 'KMU Standard',
  L3: 'Erweitert',
  L4: 'Zertifizierungsbereit',
};

/**
 * Detaillierte Beschreibungen der Compliance-Levels
 */
export const DEPTH_LEVEL_DESCRIPTIONS: Record<ComplianceDepthLevel, string> = {
  L1: 'Minimalansatz für kleine Organisationen und Startups. Fokus auf gesetzliche Pflichten mit pragmatischen Lösungen.',
  L2: 'Standard-Compliance für mittelständische Unternehmen. Ausgewogenes Verhältnis zwischen Aufwand und Compliance-Qualität.',
  L3: 'Erweiterte Compliance für größere oder risikoreichere Organisationen. Detaillierte Dokumentation und Prozesse.',
  L4: 'Vollständige Compliance für Zertifizierungen und höchste Anforderungen. Audit-ready Dokumentation.',
};

/**
 * Farben für Compliance-Levels (Tailwind-kompatibel)
 */
export const DEPTH_LEVEL_COLORS: Record<ComplianceDepthLevel, string> = {
  L1: 'green',
  L2: 'blue',
  L3: 'amber',
  L4: 'red',
};

/**
 * Deutsche Bezeichnungen für alle Dokumenttypen
 */
export const DOCUMENT_TYPE_LABELS: Record<ScopeDocumentType, string> = {
  vvt: 'Verzeichnis von Verarbeitungstätigkeiten (VVT)',
  lf: 'Löschfristenkonzept',
  tom: 'Technische und organisatorische Maßnahmen (TOM)',
  av_vertrag: 'Auftragsverarbeitungsvertrag (AVV)',
  dsi: 'Datenschutz-Informationen (Privacy Policy)',
  betroffenenrechte: 'Betroffenenrechte-Prozess',
  dsfa: 'Datenschutz-Folgenabschätzung (DSFA)',
  daten_transfer: 'Drittlandtransfer-Dokumentation',
  datenpannen: 'Datenpannen-Prozess',
  einwilligung: 'Einwilligungsmanagement',
  vertragsmanagement: 'Vertragsmanagement-Prozess',
  schulung: 'Mitarbeiterschulung',
  audit_log: 'Audit & Logging Konzept',
  risikoanalyse: 'Risikoanalyse',
  notfallplan: 'Notfall- & Krisenplan',
  zertifizierung: 'Zertifizierungsvorbereitung',
  datenschutzmanagement: 'Datenschutzmanagement-System (DSMS)',
};

/**
 * Status-Labels für Scope-Zustand
 */
export const SCOPE_STATUS_LABELS = {
  NOT_STARTED: 'Nicht begonnen',
  IN_PROGRESS: 'In Bearbeitung',
  COMPLETE: 'Abgeschlossen',
  NEEDS_UPDATE: 'Aktualisierung erforderlich',
};

/**
 * LocalStorage Key für Scope State
 */
export const STORAGE_KEY = 'bp_compliance_scope';

// ============================================================================
// Document Scope Matrix
// ============================================================================

/**
 * Vollständige Matrix aller Dokumentanforderungen pro Level
 */
export const DOCUMENT_SCOPE_MATRIX: Record<ScopeDocumentType, DocumentScopeRequirement> = {
  vvt: {
    L1: {
      required: true,
      depth: 'Basis',
      detailItems: [
        'Liste aller Verarbeitungstätigkeiten',
        'Grundlegende Angaben zu Zweck und Rechtsgrundlage',
        'Kategorien betroffener Personen und Daten',
        'Einfache Tabellenform ausreichend',
      ],
      estimatedEffort: '2-4 Stunden',
    },
    L2: {
      required: true,
      depth: 'Standard',
      detailItems: [
        'Alle L1-Anforderungen',
        'Detaillierte Beschreibung der Verarbeitungszwecke',
        'Empfängerkategorien',
        'Speicherfristen',
        'TOM-Referenzen',
        'Strukturiertes Format',
      ],
      estimatedEffort: '4-8 Stunden',
    },
    L3: {
      required: true,
      depth: 'Detailliert',
      detailItems: [
        'Alle L2-Anforderungen',
        'Vollständige Rechtsgrundlagen mit Begründung',
        'Detaillierte Datenkategorien',
        'Verknüpfung mit DSFA wo relevant',
        'Versionierung und Änderungshistorie',
        'Freigabeprozess dokumentiert',
      ],
      estimatedEffort: '8-16 Stunden',
    },
    L4: {
      required: true,
      depth: 'Audit-Ready',
      detailItems: [
        'Alle L3-Anforderungen',
        'Vollständige Nachweiskette für alle Angaben',
        'Integration mit Risikobewertung',
        'Regelmäßige Review-Zyklen dokumentiert',
        'Audit-Trail für alle Änderungen',
        'Compliance-Nachweise für jede Verarbeitung',
      ],
      estimatedEffort: '16-24 Stunden',
    },
  },
  lf: {
    L1: {
      required: true,
      depth: 'Basis',
      detailItems: [
        'Grundlegende Löschfristen für Hauptdatenkategorien',
        'Einfache Tabelle oder Liste',
        'Bezug auf gesetzliche Aufbewahrungsfristen',
      ],
      estimatedEffort: '1-2 Stunden',
    },
    L2: {
      required: true,
      depth: 'Standard',
      detailItems: [
        'Alle L1-Anforderungen',
        'Detaillierte Löschfristen pro Verarbeitungstätigkeit',
        'Begründung der Fristen',
        'Technischer Löschprozess beschrieben',
        'Verantwortlichkeiten festgelegt',
      ],
      estimatedEffort: '3-6 Stunden',
    },
    L3: {
      required: true,
      depth: 'Detailliert',
      detailItems: [
        'Alle L2-Anforderungen',
        'Ausnahmen und Sonderfälle dokumentiert',
        'Automatisierte Löschprozesse beschrieben',
        'Nachweis regelmäßiger Löschungen',
        'Eskalationsprozess bei Problemen',
      ],
      estimatedEffort: '6-10 Stunden',
    },
    L4: {
      required: true,
      depth: 'Audit-Ready',
      detailItems: [
        'Alle L3-Anforderungen',
        'Vollständiger Audit-Trail aller Löschvorgänge',
        'Regelmäßige Audits dokumentiert',
        'Compliance-Nachweise für alle Löschfristen',
        'Integration mit Backup-Konzept',
      ],
      estimatedEffort: '10-16 Stunden',
    },
  },
  tom: {
    L1: {
      required: true,
      depth: 'Basis',
      detailItems: [
        'Grundlegende technische Maßnahmen aufgelistet',
        'Organisatorische Grundmaßnahmen',
        'Einfache Checkliste oder Tabelle',
      ],
      estimatedEffort: '2-3 Stunden',
    },
    L2: {
      required: true,
      depth: 'Standard',
      detailItems: [
        'Alle L1-Anforderungen',
        'Detaillierte Beschreibung aller TOM',
        'Zuordnung zu Art. 32 DSGVO Kategorien',
        'Verantwortlichkeiten und Umsetzungsstatus',
        'Einfache Wirksamkeitsbewertung',
      ],
      estimatedEffort: '4-8 Stunden',
    },
    L3: {
      required: true,
      depth: 'Detailliert',
      detailItems: [
        'Alle L2-Anforderungen',
        'Risikobewertung für jede Maßnahme',
        'Nachweis der Umsetzung',
        'Regelmäßige Überprüfungszyklen',
        'Verbesserungsmaßnahmen dokumentiert',
        'Verknüpfung mit VVT',
      ],
      estimatedEffort: '8-12 Stunden',
    },
    L4: {
      required: true,
      depth: 'Audit-Ready',
      detailItems: [
        'Alle L3-Anforderungen',
        'Vollständige Wirksamkeitsnachweise',
        'Externe Audits dokumentiert',
        'Compliance-Matrix zu Standards (ISO 27001, etc.)',
        'Kontinuierliches Monitoring nachgewiesen',
      ],
      estimatedEffort: '12-20 Stunden',
    },
  },
  av_vertrag: {
    L1: {
      required: false,
      depth: 'Basis',
      detailItems: [
        'Standard-AVV-Vorlage verwenden',
        'Grundlegende Angaben zu Auftragsverarbeiter',
        'Wesentliche Pflichten aufgeführt',
      ],
      estimatedEffort: '1-2 Stunden pro Vertrag',
    },
    L2: {
      required: true,
      depth: 'Standard',
      detailItems: [
        'Alle L1-Anforderungen',
        'Detaillierte Beschreibung der Verarbeitung',
        'TOM des Auftragsverarbeiters geprüft',
        'Unterschriebene Verträge vollständig',
        'Register aller AVV geführt',
      ],
      estimatedEffort: '2-4 Stunden pro Vertrag',
    },
    L3: {
      required: true,
      depth: 'Detailliert',
      detailItems: [
        'Alle L2-Anforderungen',
        'Risikobewertung für jeden Auftragsverarbeiter',
        'Regelmäßige Überprüfungen dokumentiert',
        'Sub-Auftragsverarbeiter erfasst',
        'Audit-Rechte vereinbart und dokumentiert',
      ],
      estimatedEffort: '4-6 Stunden pro Vertrag',
    },
    L4: {
      required: true,
      depth: 'Audit-Ready',
      detailItems: [
        'Alle L3-Anforderungen',
        'Regelmäßige Audits durchgeführt und dokumentiert',
        'Compliance-Nachweise vom Auftragsverarbeiter',
        'Vollständiges Vertragsmanagement-System',
        'Eskalations- und Kündigungsprozesse dokumentiert',
      ],
      estimatedEffort: '6-10 Stunden pro Vertrag',
    },
  },
  dsi: {
    L1: {
      required: true,
      depth: 'Basis',
      detailItems: [
        'Datenschutzerklärung auf Website',
        'Pflichtangaben nach Art. 13/14 DSGVO',
        'Verständliche Sprache',
        'Kontaktdaten DSB/Verantwortlicher',
      ],
      estimatedEffort: '2-4 Stunden',
    },
    L2: {
      required: true,
      depth: 'Standard',
      detailItems: [
        'Alle L1-Anforderungen',
        'Detaillierte Beschreibung aller Verarbeitungen',
        'Rechtsgrundlagen erklärt',
        'Informationen zu Betroffenenrechten',
        'Cookie-/Tracking-Informationen',
        'Regelmäßige Aktualisierung',
      ],
      estimatedEffort: '4-8 Stunden',
    },
    L3: {
      required: true,
      depth: 'Detailliert',
      detailItems: [
        'Alle L2-Anforderungen',
        'Mehrsprachige Versionen wo erforderlich',
        'Layered Notices (mehrstufige Informationen)',
        'Spezifische Informationen für verschiedene Verarbeitungen',
        'Versionierung und Änderungshistorie',
        'Consent Management Integration',
      ],
      estimatedEffort: '8-12 Stunden',
    },
    L4: {
      required: true,
      depth: 'Audit-Ready',
      detailItems: [
        'Alle L3-Anforderungen',
        'Vollständige Nachweiskette für alle Informationen',
        'Audit-Trail für Änderungen',
        'Compliance mit internationalen Standards',
        'Regelmäßige rechtliche Reviews dokumentiert',
      ],
      estimatedEffort: '12-16 Stunden',
    },
  },
  betroffenenrechte: {
    L1: {
      required: true,
      depth: 'Basis',
      detailItems: [
        'Prozess für Auskunftsanfragen definiert',
        'Kontaktmöglichkeit bereitgestellt',
        'Grundlegende Fristen bekannt',
        'Einfaches Formular oder E-Mail-Vorlage',
      ],
      estimatedEffort: '1-2 Stunden',
    },
    L2: {
      required: true,
      depth: 'Standard',
      detailItems: [
        'Alle L1-Anforderungen',
        'Prozesse für alle Betroffenenrechte (Auskunft, Löschung, Berichtigung, etc.)',
        'Verantwortlichkeiten festgelegt',
        'Standardvorlagen für Antworten',
        'Tracking von Anfragen',
      ],
      estimatedEffort: '3-6 Stunden',
    },
    L3: {
      required: true,
      depth: 'Detailliert',
      detailItems: [
        'Alle L2-Anforderungen',
        'Detaillierte Prozessbeschreibungen',
        'Eskalationsprozesse bei komplexen Fällen',
        'Schulung der Mitarbeiter dokumentiert',
        'Audit-Trail aller Anfragen',
        'Nachweis der Fristeneinhaltung',
      ],
      estimatedEffort: '6-10 Stunden',
    },
    L4: {
      required: true,
      depth: 'Audit-Ready',
      detailItems: [
        'Alle L3-Anforderungen',
        'Vollständiges Ticket-/Case-Management-System',
        'Regelmäßige Audits der Prozesse',
        'Compliance-Kennzahlen und Reporting',
        'Integration mit allen relevanten Systemen',
      ],
      estimatedEffort: '10-16 Stunden',
    },
  },
  dsfa: {
    L1: {
      required: false,
      depth: 'Nicht erforderlich',
      detailItems: ['Nur bei Hard Trigger erforderlich'],
      estimatedEffort: 'N/A',
    },
    L2: {
      required: false,
      depth: 'Bei Bedarf',
      detailItems: [
        'DSFA-Schwellwertanalyse durchführen',
        'Bei Erforderlichkeit: Basis-DSFA',
        'Risiken identifiziert und bewertet',
        'Maßnahmen zur Risikominimierung',
      ],
      estimatedEffort: '4-8 Stunden pro DSFA',
    },
    L3: {
      required: false,
      depth: 'Standard',
      detailItems: [
        'Alle L2-Anforderungen',
        'Detaillierte Risikobewertung',
        'Konsultation der Betroffenen wo sinnvoll',
        'Dokumentation der Entscheidungsprozesse',
        'Regelmäßige Überprüfung',
      ],
      estimatedEffort: '8-16 Stunden pro DSFA',
    },
    L4: {
      required: true,
      depth: 'Vollständig',
      detailItems: [
        'Alle L3-Anforderungen',
        'Strukturierter DSFA-Prozess etabliert',
        'Vorabkonsultation der Aufsichtsbehörde wo erforderlich',
        'Vollständige Dokumentation aller Schritte',
        'Integration in Projektmanagement',
      ],
      estimatedEffort: '16-24 Stunden pro DSFA',
    },
  },
  daten_transfer: {
    L1: {
      required: false,
      depth: 'Basis',
      detailItems: [
        'Liste aller Drittlandtransfers',
        'Grundlegende Rechtsgrundlage identifiziert',
        'Standard-Vertragsklauseln wo nötig',
      ],
      estimatedEffort: '1-2 Stunden',
    },
    L2: {
      required: true,
      depth: 'Standard',
      detailItems: [
        'Alle L1-Anforderungen',
        'Detaillierte Dokumentation aller Transfers',
        'Angemessenheitsbeschlüsse oder geeignete Garantien',
        'Informationen an Betroffene bereitgestellt',
        'Register geführt',
      ],
      estimatedEffort: '3-6 Stunden',
    },
    L3: {
      required: true,
      depth: 'Detailliert',
      detailItems: [
        'Alle L2-Anforderungen',
        'Transfer Impact Assessment (TIA) durchgeführt',
        'Zusätzliche Schutzmaßnahmen dokumentiert',
        'Regelmäßige Überprüfung der Rechtsgrundlagen',
        'Risikobewertung für jedes Zielland',
      ],
      estimatedEffort: '6-12 Stunden',
    },
    L4: {
      required: true,
      depth: 'Audit-Ready',
      detailItems: [
        'Alle L3-Anforderungen',
        'Vollständige TIA-Dokumentation',
        'Regelmäßige Reviews dokumentiert',
        'Rechtliche Expertise nachgewiesen',
        'Compliance-Nachweise für alle Transfers',
      ],
      estimatedEffort: '12-20 Stunden',
    },
  },
  datenpannen: {
    L1: {
      required: true,
      depth: 'Basis',
      detailItems: [
        'Grundlegender Prozess für Datenpannen',
        'Kontakt zur Aufsichtsbehörde bekannt',
        'Verantwortlichkeiten grob definiert',
        'Einfache Checkliste',
      ],
      estimatedEffort: '1-2 Stunden',
    },
    L2: {
      required: true,
      depth: 'Standard',
      detailItems: [
        'Alle L1-Anforderungen',
        'Detaillierter Incident-Response-Plan',
        'Bewertungskriterien für Meldepflicht',
        'Vorlagen für Meldungen (Behörde & Betroffene)',
        'Dokumentationspflichten klar definiert',
      ],
      estimatedEffort: '3-6 Stunden',
    },
    L3: {
      required: true,
      depth: 'Detailliert',
      detailItems: [
        'Alle L2-Anforderungen',
        'Incident-Management-System etabliert',
        'Regelmäßige Übungen durchgeführt',
        'Eskalationsprozesse dokumentiert',
        'Post-Incident-Review-Prozess',
        'Lessons Learned dokumentiert',
      ],
      estimatedEffort: '6-10 Stunden',
    },
    L4: {
      required: true,
      depth: 'Audit-Ready',
      detailItems: [
        'Alle L3-Anforderungen',
        'Vollständiges Breach-Log geführt',
        'Integration mit IT-Security-Incident-Response',
        'Regelmäßige Audits des Prozesses',
        'Compliance-Nachweise für alle Vorfälle',
      ],
      estimatedEffort: '10-16 Stunden',
    },
  },
  einwilligung: {
    L1: {
      required: false,
      depth: 'Basis',
      detailItems: [
        'Einwilligungsformulare DSGVO-konform',
        'Opt-in statt Opt-out',
        'Widerrufsmöglichkeit bereitgestellt',
      ],
      estimatedEffort: '1-2 Stunden',
    },
    L2: {
      required: true,
      depth: 'Standard',
      detailItems: [
        'Alle L1-Anforderungen',
        'Granulare Einwilligungen',
        'Nachweisbarkeit der Einwilligung',
        'Dokumentation des Einwilligungsprozesses',
        'Regelmäßige Überprüfung',
      ],
      estimatedEffort: '3-6 Stunden',
    },
    L3: {
      required: true,
      depth: 'Detailliert',
      detailItems: [
        'Alle L2-Anforderungen',
        'Consent-Management-System implementiert',
        'Vollständiger Audit-Trail',
        'A/B-Testing dokumentiert',
        'Integration mit allen Datenverarbeitungen',
        'Regelmäßige Revalidierung',
      ],
      estimatedEffort: '6-12 Stunden',
    },
    L4: {
      required: true,
      depth: 'Audit-Ready',
      detailItems: [
        'Alle L3-Anforderungen',
        'Enterprise Consent Management Platform',
        'Vollständige Nachweiskette für alle Einwilligungen',
        'Compliance-Dashboard',
        'Regelmäßige externe Audits',
      ],
      estimatedEffort: '12-20 Stunden',
    },
  },
  vertragsmanagement: {
    L1: {
      required: false,
      depth: 'Basis',
      detailItems: [
        'Einfaches Register wichtiger Verträge',
        'Ablage datenschutzrelevanter Verträge',
      ],
      estimatedEffort: '1-2 Stunden',
    },
    L2: {
      required: true,
      depth: 'Standard',
      detailItems: [
        'Alle L1-Anforderungen',
        'Vollständiges Vertragsregister',
        'Datenschutzklauseln in Standardverträgen',
        'Überprüfungsprozess für neue Verträge',
        'Ablaufdaten und Kündigungsfristen getrackt',
      ],
      estimatedEffort: '3-6 Stunden Setup',
    },
    L3: {
      required: true,
      depth: 'Detailliert',
      detailItems: [
        'Alle L2-Anforderungen',
        'Vertragsmanagement-System implementiert',
        'Automatische Erinnerungen für Reviews',
        'Risikobewertung für Vertragspartner',
        'Compliance-Checks vor Vertragsabschluss',
      ],
      estimatedEffort: '6-12 Stunden Setup',
    },
    L4: {
      required: true,
      depth: 'Audit-Ready',
      detailItems: [
        'Alle L3-Anforderungen',
        'Enterprise Contract Management System',
        'Vollständiger Audit-Trail',
        'Integration mit Procurement',
        'Regelmäßige Compliance-Audits',
      ],
      estimatedEffort: '12-20 Stunden Setup',
    },
  },
  schulung: {
    L1: {
      required: false,
      depth: 'Basis',
      detailItems: [
        'Grundlegende Datenschutz-Awareness',
        'Informationsblatt für Mitarbeiter',
        'Kontaktperson benannt',
      ],
      estimatedEffort: '1-2 Stunden Vorbereitung',
    },
    L2: {
      required: true,
      depth: 'Standard',
      detailItems: [
        'Alle L1-Anforderungen',
        'Jährliche Datenschutzschulung',
        'Schulungsunterlagen erstellt',
        'Teilnahme dokumentiert',
        'Rollenspezifische Inhalte',
      ],
      estimatedEffort: '4-8 Stunden Vorbereitung',
    },
    L3: {
      required: true,
      depth: 'Detailliert',
      detailItems: [
        'Alle L2-Anforderungen',
        'E-Learning-Plattform oder strukturiertes Schulungsprogramm',
        'Wissenstests durchgeführt',
        'Auffrischungsschulungen',
        'Spezialschulungen für Schlüsselpersonal',
        'Schulungsplan erstellt',
      ],
      estimatedEffort: '8-16 Stunden Vorbereitung',
    },
    L4: {
      required: true,
      depth: 'Audit-Ready',
      detailItems: [
        'Alle L3-Anforderungen',
        'Umfassendes Schulungsprogramm',
        'Externe Schulungen wo erforderlich',
        'Zertifizierungen für Schlüsselpersonal',
        'Vollständige Dokumentation aller Schulungen',
        'Wirksamkeitsmessung',
      ],
      estimatedEffort: '16-24 Stunden Vorbereitung',
    },
  },
  audit_log: {
    L1: {
      required: false,
      depth: 'Basis',
      detailItems: [
        'Grundlegendes Logging aktiviert',
        'Zugriffsprotokolle für kritische Systeme',
      ],
      estimatedEffort: '2-4 Stunden',
    },
    L2: {
      required: false,
      depth: 'Standard',
      detailItems: [
        'Alle L1-Anforderungen',
        'Strukturiertes Logging-Konzept',
        'Aufbewahrungsfristen definiert',
        'Zugriffskontrolle auf Logs',
        'Regelmäßige Überprüfung',
      ],
      estimatedEffort: '4-8 Stunden',
    },
    L3: {
      required: true,
      depth: 'Detailliert',
      detailItems: [
        'Alle L2-Anforderungen',
        'Zentralisiertes Logging-System',
        'Automatische Alerts bei Anomalien',
        'Audit-Trail für alle datenschutzrelevanten Vorgänge',
        'Compliance-Reporting',
      ],
      estimatedEffort: '8-16 Stunden',
    },
    L4: {
      required: true,
      depth: 'Audit-Ready',
      detailItems: [
        'Alle L3-Anforderungen',
        'Enterprise SIEM-System',
        'Vollständige Nachvollziehbarkeit aller Zugriffe',
        'Regelmäßige Log-Audits dokumentiert',
        'Integration mit Incident Response',
      ],
      estimatedEffort: '16-24 Stunden',
    },
  },
  risikoanalyse: {
    L1: {
      required: false,
      depth: 'Basis',
      detailItems: [
        'Grundlegende Risikoidentifikation',
        'Einfache Bewertung nach Eintrittswahrscheinlichkeit und Auswirkung',
      ],
      estimatedEffort: '2-4 Stunden',
    },
    L2: {
      required: false,
      depth: 'Standard',
      detailItems: [
        'Alle L1-Anforderungen',
        'Strukturierte Risikoanalyse',
        'Risikomatrix erstellt',
        'Maßnahmen zur Risikominimierung definiert',
        'Jährliche Überprüfung',
      ],
      estimatedEffort: '4-8 Stunden',
    },
    L3: {
      required: true,
      depth: 'Detailliert',
      detailItems: [
        'Alle L2-Anforderungen',
        'Umfassende Risikoanalyse nach Standard-Framework',
        'Integration mit VVT und DSFA',
        'Risikomanagement-Prozess etabliert',
        'Regelmäßige Reviews',
        'Risiko-Dashboard',
      ],
      estimatedEffort: '8-16 Stunden',
    },
    L4: {
      required: true,
      depth: 'Audit-Ready',
      detailItems: [
        'Alle L3-Anforderungen',
        'Enterprise Risk Management System',
        'Vollständige Integration mit ISMS',
        'Kontinuierliche Risikoüberwachung',
        'Regelmäßige externe Assessments',
      ],
      estimatedEffort: '16-24 Stunden',
    },
  },
  notfallplan: {
    L1: {
      required: false,
      depth: 'Basis',
      detailItems: [
        'Grundlegende Notfallkontakte definiert',
        'Einfacher Backup-Prozess',
      ],
      estimatedEffort: '1-2 Stunden',
    },
    L2: {
      required: false,
      depth: 'Standard',
      detailItems: [
        'Alle L1-Anforderungen',
        'Notfall- und Krisenplan erstellt',
        'Business Continuity Grundlagen',
        'Backup und Recovery dokumentiert',
        'Verantwortlichkeiten festgelegt',
      ],
      estimatedEffort: '3-6 Stunden',
    },
    L3: {
      required: true,
      depth: 'Detailliert',
      detailItems: [
        'Alle L2-Anforderungen',
        'Detaillierter Business Continuity Plan',
        'Disaster Recovery Plan',
        'Regelmäßige Tests durchgeführt',
        'Eskalationsprozesse dokumentiert',
        'Externe Kommunikation geplant',
      ],
      estimatedEffort: '6-12 Stunden',
    },
    L4: {
      required: true,
      depth: 'Audit-Ready',
      detailItems: [
        'Alle L3-Anforderungen',
        'ISO 22301 konformes BCMS',
        'Regelmäßige Übungen und Audits',
        'Vollständige Dokumentation',
        'Integration mit IT-Disaster-Recovery',
      ],
      estimatedEffort: '12-20 Stunden',
    },
  },
  zertifizierung: {
    L1: {
      required: false,
      depth: 'Nicht relevant',
      detailItems: ['Keine Zertifizierung erforderlich'],
      estimatedEffort: 'N/A',
    },
    L2: {
      required: false,
      depth: 'Nicht relevant',
      detailItems: ['Keine Zertifizierung erforderlich'],
      estimatedEffort: 'N/A',
    },
    L3: {
      required: false,
      depth: 'Optional',
      detailItems: [
        'Evaluierung möglicher Zertifizierungen',
        'Gap-Analyse durchgeführt',
        'Entscheidung für/gegen Zertifizierung dokumentiert',
      ],
      estimatedEffort: '4-8 Stunden',
    },
    L4: {
      required: true,
      depth: 'Vollständig',
      detailItems: [
        'Zertifizierungsvorbereitung (ISO 27001, ISO 27701, etc.)',
        'Gap-Analyse abgeschlossen',
        'Maßnahmenplan erstellt',
        'Interne Audits durchgeführt',
        'Dokumentation audit-ready',
        'Zertifizierungsstelle ausgewählt',
      ],
      estimatedEffort: '40-80 Stunden',
    },
  },
  datenschutzmanagement: {
    L1: {
      required: false,
      depth: 'Nicht erforderlich',
      detailItems: ['Kein formales DSMS notwendig'],
      estimatedEffort: 'N/A',
    },
    L2: {
      required: false,
      depth: 'Basis',
      detailItems: [
        'Grundlegendes Datenschutzmanagement',
        'Verantwortlichkeiten definiert',
        'Regelmäßige Reviews geplant',
      ],
      estimatedEffort: '2-4 Stunden',
    },
    L3: {
      required: true,
      depth: 'Standard',
      detailItems: [
        'Alle L2-Anforderungen',
        'Strukturiertes DSMS etabliert',
        'Datenschutz-Policy erstellt',
        'Regelmäßige Management-Reviews',
        'KPIs für Datenschutz definiert',
        'Verbesserungsprozess etabliert',
      ],
      estimatedEffort: '8-16 Stunden',
    },
    L4: {
      required: true,
      depth: 'Vollständig',
      detailItems: [
        'Alle L3-Anforderungen',
        'ISO 27701 oder vergleichbares DSMS',
        'Integration mit ISMS',
        'Vollständige Dokumentation aller Prozesse',
        'Regelmäßige interne und externe Audits',
        'Kontinuierliche Verbesserung nachgewiesen',
      ],
      estimatedEffort: '24-40 Stunden',
    },
  },
};

// ============================================================================
// Document to SDK Step URL Mapping
// ============================================================================

/**
 * Mapping von Dokumenttypen zu SDK-Schritt-URLs
 */
export const DOCUMENT_SDK_STEP_MAP: Partial<Record<ScopeDocumentType, string>> = {
  vvt: '/sdk/vvt',
  lf: '/sdk/loeschkonzept',
  tom: '/sdk/tom',
  av_vertrag: '/sdk/auftragsverarbeitung',
  dsi: '/sdk/datenschutzinformation',
  betroffenenrechte: '/sdk/betroffenenrechte',
  dsfa: '/sdk/dsfa',
  daten_transfer: '/sdk/drittland',
  datenpannen: '/sdk/datenpanne',
  einwilligung: '/sdk/einwilligung',
  vertragsmanagement: '/sdk/vertragsmanagement',
  schulung: '/sdk/schulung',
  audit_log: '/sdk/audit-logging',
  risikoanalyse: '/sdk/risikoanalyse',
  notfallplan: '/sdk/notfallplan',
  zertifizierung: '/sdk/zertifizierung',
  datenschutzmanagement: '/sdk/dsms',
};

// ============================================================================
// Helper Functions
// ============================================================================

/**
 * Erstellt einen leeren Scope State
 */
export function createEmptyScopeState(): ComplianceScopeState {
  return {
    answers: [],
    decision: null,
    lastEvaluatedAt: null,
    isComplete: false,
  };
}

/**
 * Erstellt eine leere Scope Decision mit Default-Werten
 */
export function createEmptyScopeDecision(): ScopeDecision {
  return {
    id: `decision_${Date.now()}`,
    determinedLevel: 'L1',
    scores: {
      risk_score: 0,
      complexity_score: 0,
      assurance_need: 0,
      composite_score: 0,
    },
    triggeredHardTriggers: [],
    requiredDocuments: [],
    riskFlags: [],
    gaps: [],
    nextActions: [],
    reasoning: [],
    createdAt: new Date().toISOString(),
    updatedAt: new Date().toISOString(),
  };
}

/**
 * Gibt das höhere von zwei Depth Levels zurück
 */
export function maxDepthLevel(
  a: ComplianceDepthLevel,
  b: ComplianceDepthLevel
): ComplianceDepthLevel {
  const levels: ComplianceDepthLevel[] = ['L1', 'L2', 'L3', 'L4'];
  const indexA = levels.indexOf(a);
  const indexB = levels.indexOf(b);
  return levels[Math.max(indexA, indexB)];
}

/**
 * Konvertiert Depth Level zu numerischem Wert (1-4)
 */
export function getDepthLevelNumeric(level: ComplianceDepthLevel): number {
  const map: Record<ComplianceDepthLevel, number> = {
    L1: 1,
    L2: 2,
    L3: 3,
    L4: 4,
  };
  return map[level];
}

/**
 * Konvertiert numerischen Wert (1-4) zu Depth Level
 */
export function depthLevelFromNumeric(n: number): ComplianceDepthLevel {
  const map: Record<number, ComplianceDepthLevel> = {
    1: 'L1',
    2: 'L2',
    3: 'L3',
    4: 'L4',
  };
  return map[Math.max(1, Math.min(4, Math.round(n)))] || 'L1';
}
