/**
 * Controls Library
 *
 * Standard controls for vendor and processing activity compliance
 */

import { Control, ControlDomain, ReviewFrequency, LocalizedText } from '../types'

// ==========================================
// CONTROL DEFINITIONS
// ==========================================

export const CONTROLS_LIBRARY: Control[] = [
  // ==========================================
  // TRANSFER - Drittlandtransfer Controls
  // ==========================================
  {
    id: 'VND-TRF-01',
    domain: 'TRANSFER',
    title: {
      de: 'Drittlandtransfer nur mit Rechtsgrundlage',
      en: 'Third country transfer with legal basis',
    },
    description: {
      de: 'Drittlandtransfers erfolgen nur auf Basis von SCC, BCR oder Angemessenheitsbeschluss',
      en: 'Third country transfers only based on SCC, BCR or adequacy decision',
    },
    passCriteria: {
      de: 'SCC oder BCR vertraglich vereinbart ODER Angemessenheitsbeschluss vorhanden',
      en: 'SCC or BCR contractually agreed OR adequacy decision exists',
    },
    requirements: ['Art. 44-49 DSGVO', 'ISO 27001 A.15.1.2'],
    isRequired: true,
    defaultFrequency: 'ANNUAL',
  },
  {
    id: 'VND-TRF-02',
    domain: 'TRANSFER',
    title: {
      de: 'Aktuelle Standardvertragsklauseln',
      en: 'Current Standard Contractual Clauses',
    },
    description: {
      de: 'Bei SCC-Nutzung: Verwendung der aktuellen EU-Kommission-Klauseln (2021)',
      en: 'When using SCC: Current EU Commission clauses (2021) are used',
    },
    passCriteria: {
      de: 'SCC 2021 (Durchführungsbeschluss (EU) 2021/914) verwendet',
      en: 'SCC 2021 (Implementing Decision (EU) 2021/914) used',
    },
    requirements: ['Art. 46 Abs. 2 lit. c DSGVO'],
    isRequired: true,
    defaultFrequency: 'ANNUAL',
  },
  {
    id: 'VND-TRF-03',
    domain: 'TRANSFER',
    title: {
      de: 'Transfer Impact Assessment (TIA)',
      en: 'Transfer Impact Assessment (TIA)',
    },
    description: {
      de: 'Bei Transfers in Drittländer ohne Angemessenheitsbeschluss ist TIA durchzuführen',
      en: 'TIA required for transfers to third countries without adequacy decision',
    },
    passCriteria: {
      de: 'TIA dokumentiert und bewertet Risiken als akzeptabel',
      en: 'TIA documented and risks assessed as acceptable',
    },
    requirements: ['Schrems II Urteil', 'EDSA Empfehlungen 01/2020'],
    isRequired: true,
    defaultFrequency: 'ANNUAL',
  },
  {
    id: 'VND-TRF-04',
    domain: 'TRANSFER',
    title: {
      de: 'Zusätzliche Schutzmaßnahmen',
      en: 'Supplementary Measures',
    },
    description: {
      de: 'Bei Bedarf sind zusätzliche technische/organisatorische Maßnahmen implementiert',
      en: 'Supplementary technical/organizational measures implemented where needed',
    },
    passCriteria: {
      de: 'Ergänzende Maßnahmen dokumentiert (Verschlüsselung, Pseudonymisierung, etc.)',
      en: 'Supplementary measures documented (encryption, pseudonymization, etc.)',
    },
    requirements: ['EDSA Empfehlungen 01/2020'],
    isRequired: false,
    defaultFrequency: 'ANNUAL',
  },
  {
    id: 'VND-TRF-05',
    domain: 'TRANSFER',
    title: {
      de: 'Überwachung Angemessenheitsbeschlüsse',
      en: 'Monitoring Adequacy Decisions',
    },
    description: {
      de: 'Änderungen bei Angemessenheitsbeschlüssen werden überwacht',
      en: 'Changes to adequacy decisions are monitored',
    },
    passCriteria: {
      de: 'Prozess zur Überwachung und Reaktion auf Änderungen etabliert',
      en: 'Process for monitoring and responding to changes established',
    },
    requirements: ['Art. 45 DSGVO'],
    isRequired: false,
    defaultFrequency: 'QUARTERLY',
  },

  // ==========================================
  // AUDIT - Auditrechte Controls
  // ==========================================
  {
    id: 'VND-AUD-01',
    domain: 'AUDIT',
    title: {
      de: 'Auditrecht vertraglich vereinbart',
      en: 'Audit right contractually agreed',
    },
    description: {
      de: 'Vertrag enthält wirksames Auditrecht ohne unangemessene Einschränkungen',
      en: 'Contract contains effective audit right without unreasonable restrictions',
    },
    passCriteria: {
      de: 'Auditrecht im AVV enthalten, max. 30 Tage Vorlaufzeit, keine Ausschlussklausel',
      en: 'Audit right in DPA, max 30 days notice, no exclusion clause',
    },
    requirements: ['Art. 28 Abs. 3 lit. h DSGVO'],
    isRequired: true,
    defaultFrequency: 'ANNUAL',
  },
  {
    id: 'VND-AUD-02',
    domain: 'AUDIT',
    title: {
      de: 'Vor-Ort-Inspektionen möglich',
      en: 'On-site inspections possible',
    },
    description: {
      de: 'Vertrag erlaubt Vor-Ort-Inspektionen bei dem Auftragsverarbeiter',
      en: 'Contract allows on-site inspections at the processor',
    },
    passCriteria: {
      de: 'Vor-Ort-Audit explizit erlaubt, Zugang zu relevanten Bereichen',
      en: 'On-site audit explicitly allowed, access to relevant areas',
    },
    requirements: ['Art. 28 Abs. 3 lit. h DSGVO'],
    isRequired: true,
    defaultFrequency: 'ANNUAL',
  },
  {
    id: 'VND-AUD-03',
    domain: 'AUDIT',
    title: {
      de: 'Aktuelle Zertifizierungen',
      en: 'Current Certifications',
    },
    description: {
      de: 'Relevante Sicherheitszertifizierungen sind aktuell und gültig',
      en: 'Relevant security certifications are current and valid',
    },
    passCriteria: {
      de: 'ISO 27001, SOC 2 oder vergleichbar, nicht abgelaufen',
      en: 'ISO 27001, SOC 2 or equivalent, not expired',
    },
    requirements: ['Art. 32 DSGVO', 'ISO 27001 A.15.1.1'],
    isRequired: false,
    defaultFrequency: 'ANNUAL',
  },
  {
    id: 'VND-AUD-04',
    domain: 'AUDIT',
    title: {
      de: 'Letzte Prüfung durchgeführt',
      en: 'Last review conducted',
    },
    description: {
      de: 'Vendor wurde innerhalb des Review-Zyklus geprüft',
      en: 'Vendor was reviewed within the review cycle',
    },
    passCriteria: {
      de: 'Dokumentierte Prüfung innerhalb des festgelegten Intervalls',
      en: 'Documented review within the defined interval',
    },
    requirements: ['Art. 28 Abs. 3 lit. h DSGVO'],
    isRequired: true,
    defaultFrequency: 'ANNUAL',
  },
  {
    id: 'VND-AUD-05',
    domain: 'AUDIT',
    title: {
      de: 'Prüfberichte verfügbar',
      en: 'Audit reports available',
    },
    description: {
      de: 'Aktuelle Prüfberichte (SOC 2, Penetrationstest, etc.) liegen vor',
      en: 'Current audit reports (SOC 2, penetration test, etc.) are available',
    },
    passCriteria: {
      de: 'Prüfberichte nicht älter als 12 Monate',
      en: 'Audit reports not older than 12 months',
    },
    requirements: ['ISO 27001 A.18.2.1'],
    isRequired: false,
    defaultFrequency: 'ANNUAL',
  },

  // ==========================================
  // DELETION - Löschung Controls
  // ==========================================
  {
    id: 'VND-DEL-01',
    domain: 'DELETION',
    title: {
      de: 'Löschung/Rückgabe nach Vertragsende',
      en: 'Deletion/return after contract end',
    },
    description: {
      de: 'Klare Regelung zur Löschung oder Rückgabe aller Daten nach Vertragsende',
      en: 'Clear provision for deletion or return of all data after contract end',
    },
    passCriteria: {
      de: 'Löschfrist max. 30 Tage, Löschbestätigung vorgesehen',
      en: 'Deletion within max 30 days, deletion confirmation provided',
    },
    requirements: ['Art. 28 Abs. 3 lit. g DSGVO'],
    isRequired: true,
    defaultFrequency: 'ANNUAL',
  },
  {
    id: 'VND-DEL-02',
    domain: 'DELETION',
    title: {
      de: 'Löschbestätigung',
      en: 'Deletion confirmation',
    },
    description: {
      de: 'Schriftliche Bestätigung der vollständigen Datenlöschung',
      en: 'Written confirmation of complete data deletion',
    },
    passCriteria: {
      de: 'Löschbestätigung vertraglich vereinbart und einforderbar',
      en: 'Deletion confirmation contractually agreed and enforceable',
    },
    requirements: ['Art. 28 Abs. 3 lit. g DSGVO'],
    isRequired: true,
    defaultFrequency: 'ANNUAL',
  },
  {
    id: 'VND-DEL-03',
    domain: 'DELETION',
    title: {
      de: 'Löschung bei Unterauftragnehmern',
      en: 'Deletion at sub-processors',
    },
    description: {
      de: 'Löschpflicht erstreckt sich auf alle Unterauftragnehmer',
      en: 'Deletion obligation extends to all sub-processors',
    },
    passCriteria: {
      de: 'Weitergabe der Löschpflicht an Unterauftragnehmer vertraglich vereinbart',
      en: 'Transfer of deletion obligation to sub-processors contractually agreed',
    },
    requirements: ['Art. 28 Abs. 3 lit. g, d DSGVO'],
    isRequired: true,
    defaultFrequency: 'ANNUAL',
  },
  {
    id: 'VND-DEL-04',
    domain: 'DELETION',
    title: {
      de: 'Backup-Löschung',
      en: 'Backup deletion',
    },
    description: {
      de: 'Daten werden auch aus Backups gelöscht',
      en: 'Data is also deleted from backups',
    },
    passCriteria: {
      de: 'Backup-Löschung geregelt, max. Aufbewahrungsfrist für Backups definiert',
      en: 'Backup deletion regulated, max retention period for backups defined',
    },
    requirements: ['Art. 28 Abs. 3 lit. g DSGVO'],
    isRequired: false,
    defaultFrequency: 'ANNUAL',
  },

  // ==========================================
  // INCIDENT - Incident Response Controls
  // ==========================================
  {
    id: 'VND-INC-01',
    domain: 'INCIDENT',
    title: {
      de: 'Meldepflicht bei Datenpannen',
      en: 'Data breach notification obligation',
    },
    description: {
      de: 'Unverzügliche Meldung von Datenschutzverletzungen',
      en: 'Immediate notification of data protection violations',
    },
    passCriteria: {
      de: 'Meldepflicht vereinbart, Frist max. 24-48h, Mindestinhalte definiert',
      en: 'Notification obligation agreed, deadline max 24-48h, minimum content defined',
    },
    requirements: ['Art. 33 Abs. 2 DSGVO'],
    isRequired: true,
    defaultFrequency: 'ANNUAL',
  },
  {
    id: 'VND-INC-02',
    domain: 'INCIDENT',
    title: {
      de: 'Incident Response Plan',
      en: 'Incident Response Plan',
    },
    description: {
      de: 'Vendor hat dokumentierten Incident Response Plan',
      en: 'Vendor has documented incident response plan',
    },
    passCriteria: {
      de: 'Incident Response Plan liegt vor und wurde getestet',
      en: 'Incident response plan exists and has been tested',
    },
    requirements: ['ISO 27001 A.16.1'],
    isRequired: false,
    defaultFrequency: 'ANNUAL',
  },
  {
    id: 'VND-INC-03',
    domain: 'INCIDENT',
    title: {
      de: 'Kontaktstelle für Incidents',
      en: 'Contact point for incidents',
    },
    description: {
      de: 'Definierte Kontaktstelle für Datenschutzvorfälle',
      en: 'Defined contact point for data protection incidents',
    },
    passCriteria: {
      de: 'Kontaktdaten für Incident-Meldungen bekannt und aktuell',
      en: 'Contact details for incident reporting known and current',
    },
    requirements: ['Art. 33 Abs. 2 DSGVO'],
    isRequired: true,
    defaultFrequency: 'QUARTERLY',
  },
  {
    id: 'VND-INC-04',
    domain: 'INCIDENT',
    title: {
      de: 'Unterstützung bei Incident-Dokumentation',
      en: 'Support with incident documentation',
    },
    description: {
      de: 'Vendor unterstützt bei der Dokumentation von Vorfällen',
      en: 'Vendor supports documentation of incidents',
    },
    passCriteria: {
      de: 'Unterstützungspflicht bei Dokumentation vertraglich vereinbart',
      en: 'Support obligation for documentation contractually agreed',
    },
    requirements: ['Art. 33 Abs. 5 DSGVO'],
    isRequired: true,
    defaultFrequency: 'ANNUAL',
  },

  // ==========================================
  // SUBPROCESSOR - Unterauftragnehmer Controls
  // ==========================================
  {
    id: 'VND-SUB-01',
    domain: 'SUBPROCESSOR',
    title: {
      de: 'Genehmigungspflicht für Unterauftragnehmer',
      en: 'Approval requirement for sub-processors',
    },
    description: {
      de: 'Einsatz von Unterauftragnehmern nur mit Genehmigung',
      en: 'Use of sub-processors only with approval',
    },
    passCriteria: {
      de: 'Genehmigungserfordernis (spezifisch oder allgemein mit Widerspruchsrecht) vereinbart',
      en: 'Approval requirement (specific or general with objection right) agreed',
    },
    requirements: ['Art. 28 Abs. 2, 4 DSGVO'],
    isRequired: true,
    defaultFrequency: 'ANNUAL',
  },
  {
    id: 'VND-SUB-02',
    domain: 'SUBPROCESSOR',
    title: {
      de: 'Aktuelle Unterauftragnehmer-Liste',
      en: 'Current sub-processor list',
    },
    description: {
      de: 'Vollständige und aktuelle Liste aller Unterauftragnehmer',
      en: 'Complete and current list of all sub-processors',
    },
    passCriteria: {
      de: 'Liste liegt vor mit Name, Sitz, Verarbeitungszweck',
      en: 'List available with name, location, processing purpose',
    },
    requirements: ['Art. 28 Abs. 2 DSGVO'],
    isRequired: true,
    defaultFrequency: 'QUARTERLY',
  },
  {
    id: 'VND-SUB-03',
    domain: 'SUBPROCESSOR',
    title: {
      de: 'Informationspflicht bei Änderungen',
      en: 'Notification obligation for changes',
    },
    description: {
      de: 'Information über neue oder geänderte Unterauftragnehmer',
      en: 'Information about new or changed sub-processors',
    },
    passCriteria: {
      de: 'Vorabinformation vereinbart, ausreichende Frist für Widerspruch',
      en: 'Advance notification agreed, sufficient time for objection',
    },
    requirements: ['Art. 28 Abs. 2 DSGVO'],
    isRequired: true,
    defaultFrequency: 'ANNUAL',
  },
  {
    id: 'VND-SUB-04',
    domain: 'SUBPROCESSOR',
    title: {
      de: 'Weitergabe der Datenschutzpflichten',
      en: 'Transfer of data protection obligations',
    },
    description: {
      de: 'Datenschutzpflichten werden an Unterauftragnehmer weitergegeben',
      en: 'Data protection obligations are transferred to sub-processors',
    },
    passCriteria: {
      de: 'Vertraglich vereinbart, dass Unterauftragnehmer gleichen Pflichten unterliegen',
      en: 'Contractually agreed that sub-processors are subject to same obligations',
    },
    requirements: ['Art. 28 Abs. 4 DSGVO'],
    isRequired: true,
    defaultFrequency: 'ANNUAL',
  },
  {
    id: 'VND-SUB-05',
    domain: 'SUBPROCESSOR',
    title: {
      de: 'Haftung für Unterauftragnehmer',
      en: 'Liability for sub-processors',
    },
    description: {
      de: 'Klare Haftungsregelung für Unterauftragnehmer',
      en: 'Clear liability provision for sub-processors',
    },
    passCriteria: {
      de: 'Auftragsverarbeiter haftet für Unterauftragnehmer wie für eigenes Handeln',
      en: 'Processor is liable for sub-processors as for own actions',
    },
    requirements: ['Art. 28 Abs. 4 DSGVO'],
    isRequired: true,
    defaultFrequency: 'ANNUAL',
  },

  // ==========================================
  // TOM - Technische/Organisatorische Maßnahmen
  // ==========================================
  {
    id: 'VND-TOM-01',
    domain: 'TOM',
    title: {
      de: 'TOM-Dokumentation vorhanden',
      en: 'TOM documentation available',
    },
    description: {
      de: 'Vollständige Dokumentation der technischen und organisatorischen Maßnahmen',
      en: 'Complete documentation of technical and organizational measures',
    },
    passCriteria: {
      de: 'TOM-Anlage vorhanden, aktuell, spezifisch für die Verarbeitung',
      en: 'TOM annex available, current, specific to the processing',
    },
    requirements: ['Art. 28 Abs. 3 lit. c DSGVO', 'Art. 32 DSGVO'],
    isRequired: true,
    defaultFrequency: 'ANNUAL',
  },
  {
    id: 'VND-TOM-02',
    domain: 'TOM',
    title: {
      de: 'Verschlüsselung',
      en: 'Encryption',
    },
    description: {
      de: 'Angemessene Verschlüsselung für Daten in Transit und at Rest',
      en: 'Appropriate encryption for data in transit and at rest',
    },
    passCriteria: {
      de: 'TLS 1.2+ für Transit, AES-256 für at Rest',
      en: 'TLS 1.2+ for transit, AES-256 for at rest',
    },
    requirements: ['Art. 32 Abs. 1 lit. a DSGVO'],
    isRequired: true,
    defaultFrequency: 'ANNUAL',
  },
  {
    id: 'VND-TOM-03',
    domain: 'TOM',
    title: {
      de: 'Zugriffskontrolle',
      en: 'Access control',
    },
    description: {
      de: 'Angemessene Zugriffskontrollmechanismen',
      en: 'Appropriate access control mechanisms',
    },
    passCriteria: {
      de: 'Rollenbasierte Zugriffskontrolle, Least Privilege, Logging',
      en: 'Role-based access control, least privilege, logging',
    },
    requirements: ['Art. 32 Abs. 1 lit. b DSGVO', 'ISO 27001 A.9'],
    isRequired: true,
    defaultFrequency: 'ANNUAL',
  },
  {
    id: 'VND-TOM-04',
    domain: 'TOM',
    title: {
      de: 'Verfügbarkeit und Wiederherstellung',
      en: 'Availability and recovery',
    },
    description: {
      de: 'Maßnahmen zur Sicherstellung der Verfügbarkeit und Wiederherstellung',
      en: 'Measures to ensure availability and recovery',
    },
    passCriteria: {
      de: 'Backup-Konzept, DR-Plan, RTO/RPO definiert',
      en: 'Backup concept, DR plan, RTO/RPO defined',
    },
    requirements: ['Art. 32 Abs. 1 lit. b, c DSGVO'],
    isRequired: true,
    defaultFrequency: 'ANNUAL',
  },
  {
    id: 'VND-TOM-05',
    domain: 'TOM',
    title: {
      de: 'Regelmäßige TOM-Überprüfung',
      en: 'Regular TOM review',
    },
    description: {
      de: 'Regelmäßige Überprüfung und Aktualisierung der TOM',
      en: 'Regular review and update of TOM',
    },
    passCriteria: {
      de: 'TOM werden mindestens jährlich überprüft und bei Bedarf aktualisiert',
      en: 'TOM are reviewed at least annually and updated as needed',
    },
    requirements: ['Art. 32 Abs. 1 lit. d DSGVO'],
    isRequired: true,
    defaultFrequency: 'ANNUAL',
  },
  {
    id: 'VND-TOM-06',
    domain: 'TOM',
    title: {
      de: 'Penetrationstest',
      en: 'Penetration testing',
    },
    description: {
      de: 'Regelmäßige Penetrationstests der relevanten Systeme',
      en: 'Regular penetration testing of relevant systems',
    },
    passCriteria: {
      de: 'Jährlicher Pentest, kritische Findings behoben',
      en: 'Annual pentest, critical findings resolved',
    },
    requirements: ['ISO 27001 A.12.6.1'],
    isRequired: false,
    defaultFrequency: 'ANNUAL',
  },

  // ==========================================
  // CONTRACT - Vertragliche Grundlagen
  // ==========================================
  {
    id: 'VND-CON-01',
    domain: 'CONTRACT',
    title: {
      de: 'Weisungsgebundenheit',
      en: 'Instruction binding',
    },
    description: {
      de: 'Auftragsverarbeiter ist an Weisungen gebunden',
      en: 'Processor is bound by instructions',
    },
    passCriteria: {
      de: 'Weisungsgebundenheit explizit vereinbart, Hinweispflicht bei rechtswidrigen Weisungen',
      en: 'Instruction binding explicitly agreed, notification obligation for unlawful instructions',
    },
    requirements: ['Art. 28 Abs. 3 lit. a DSGVO'],
    isRequired: true,
    defaultFrequency: 'ANNUAL',
  },
  {
    id: 'VND-CON-02',
    domain: 'CONTRACT',
    title: {
      de: 'Vertraulichkeitsverpflichtung',
      en: 'Confidentiality obligation',
    },
    description: {
      de: 'Mitarbeiter sind zur Vertraulichkeit verpflichtet',
      en: 'Employees are obligated to confidentiality',
    },
    passCriteria: {
      de: 'Vertraulichkeitsverpflichtung für alle Mitarbeiter mit Datenzugriff',
      en: 'Confidentiality obligation for all employees with data access',
    },
    requirements: ['Art. 28 Abs. 3 lit. b DSGVO'],
    isRequired: true,
    defaultFrequency: 'ANNUAL',
  },
  {
    id: 'VND-CON-03',
    domain: 'CONTRACT',
    title: {
      de: 'Gegenstand und Dauer der Verarbeitung',
      en: 'Subject and duration of processing',
    },
    description: {
      de: 'Klare Definition von Gegenstand und Dauer der Verarbeitung',
      en: 'Clear definition of subject and duration of processing',
    },
    passCriteria: {
      de: 'Verarbeitungsgegenstand, Dauer, Art der Daten, Betroffene definiert',
      en: 'Processing subject, duration, type of data, data subjects defined',
    },
    requirements: ['Art. 28 Abs. 3 DSGVO'],
    isRequired: true,
    defaultFrequency: 'ANNUAL',
  },
  {
    id: 'VND-CON-04',
    domain: 'CONTRACT',
    title: {
      de: 'Schriftform/Textform',
      en: 'Written/text form',
    },
    description: {
      de: 'AVV in Schriftform oder elektronischem Format',
      en: 'DPA in written or electronic format',
    },
    passCriteria: {
      de: 'AVV in Schriftform oder elektronisch mit qualifizierter Signatur',
      en: 'DPA in written form or electronically with qualified signature',
    },
    requirements: ['Art. 28 Abs. 9 DSGVO'],
    isRequired: true,
    defaultFrequency: 'ANNUAL',
  },

  // ==========================================
  // DATA_SUBJECT - Betroffenenrechte
  // ==========================================
  {
    id: 'VND-DSR-01',
    domain: 'DATA_SUBJECT',
    title: {
      de: 'Unterstützung bei Betroffenenrechten',
      en: 'Support for data subject rights',
    },
    description: {
      de: 'Vendor unterstützt bei der Erfüllung von Betroffenenrechten',
      en: 'Vendor supports fulfillment of data subject rights',
    },
    passCriteria: {
      de: 'Unterstützungspflicht vereinbart, Prozess zur Weiterleitung definiert',
      en: 'Support obligation agreed, process for forwarding defined',
    },
    requirements: ['Art. 28 Abs. 3 lit. e DSGVO'],
    isRequired: true,
    defaultFrequency: 'ANNUAL',
  },
  {
    id: 'VND-DSR-02',
    domain: 'DATA_SUBJECT',
    title: {
      de: 'Reaktionszeit für Anfragen',
      en: 'Response time for requests',
    },
    description: {
      de: 'Definierte Reaktionszeit für Betroffenenanfragen',
      en: 'Defined response time for data subject requests',
    },
    passCriteria: {
      de: 'Reaktionszeit max. 5 Werktage, um Frist von 1 Monat einhalten zu können',
      en: 'Response time max. 5 business days to meet 1 month deadline',
    },
    requirements: ['Art. 12 Abs. 3 DSGVO'],
    isRequired: true,
    defaultFrequency: 'ANNUAL',
  },

  // ==========================================
  // SECURITY - Sicherheit
  // ==========================================
  {
    id: 'VND-SEC-01',
    domain: 'SECURITY',
    title: {
      de: 'Sicherheitsbewertung',
      en: 'Security assessment',
    },
    description: {
      de: 'Regelmäßige Sicherheitsbewertung des Vendors',
      en: 'Regular security assessment of the vendor',
    },
    passCriteria: {
      de: 'Sicherheitsfragebogen ausgefüllt, keine kritischen Lücken',
      en: 'Security questionnaire completed, no critical gaps',
    },
    requirements: ['Art. 32 DSGVO', 'ISO 27001 A.15.2.1'],
    isRequired: true,
    defaultFrequency: 'ANNUAL',
  },
  {
    id: 'VND-SEC-02',
    domain: 'SECURITY',
    title: {
      de: 'Vulnerability Management',
      en: 'Vulnerability management',
    },
    description: {
      de: 'Etabliertes Vulnerability Management beim Vendor',
      en: 'Established vulnerability management at the vendor',
    },
    passCriteria: {
      de: 'Regelmäßige Schwachstellen-Scans, Patch-Management dokumentiert',
      en: 'Regular vulnerability scans, patch management documented',
    },
    requirements: ['ISO 27001 A.12.6'],
    isRequired: false,
    defaultFrequency: 'ANNUAL',
  },
  {
    id: 'VND-SEC-03',
    domain: 'SECURITY',
    title: {
      de: 'Mitarbeiter-Schulung',
      en: 'Employee training',
    },
    description: {
      de: 'Datenschutz-Schulung für Mitarbeiter des Vendors',
      en: 'Data protection training for vendor employees',
    },
    passCriteria: {
      de: 'Regelmäßige Schulungen (mind. jährlich), Nachweis verfügbar',
      en: 'Regular training (at least annually), proof available',
    },
    requirements: ['Art. 39 Abs. 1 lit. b DSGVO'],
    isRequired: false,
    defaultFrequency: 'ANNUAL',
  },

  // ==========================================
  // GOVERNANCE - Governance
  // ==========================================
  {
    id: 'VND-GOV-01',
    domain: 'GOVERNANCE',
    title: {
      de: 'Datenschutzbeauftragter benannt',
      en: 'Data protection officer appointed',
    },
    description: {
      de: 'Vendor hat DSB benannt (wenn erforderlich)',
      en: 'Vendor has appointed DPO (if required)',
    },
    passCriteria: {
      de: 'DSB benannt und Kontaktdaten verfügbar',
      en: 'DPO appointed and contact details available',
    },
    requirements: ['Art. 37 DSGVO'],
    isRequired: false,
    defaultFrequency: 'ANNUAL',
  },
  {
    id: 'VND-GOV-02',
    domain: 'GOVERNANCE',
    title: {
      de: 'Verzeichnis der Verarbeitungstätigkeiten',
      en: 'Records of processing activities',
    },
    description: {
      de: 'Vendor führt eigenes Verarbeitungsverzeichnis',
      en: 'Vendor maintains own processing records',
    },
    passCriteria: {
      de: 'Verzeichnis nach Art. 30 Abs. 2 DSGVO vorhanden',
      en: 'Records according to Art. 30(2) GDPR available',
    },
    requirements: ['Art. 30 Abs. 2 DSGVO'],
    isRequired: true,
    defaultFrequency: 'ANNUAL',
  },
  {
    id: 'VND-GOV-03',
    domain: 'GOVERNANCE',
    title: {
      de: 'Unterstützung bei DSFA',
      en: 'Support for DPIA',
    },
    description: {
      de: 'Vendor unterstützt bei Datenschutz-Folgenabschätzung',
      en: 'Vendor supports data protection impact assessment',
    },
    passCriteria: {
      de: 'Unterstützungspflicht bei DSFA vertraglich vereinbart',
      en: 'Support obligation for DPIA contractually agreed',
    },
    requirements: ['Art. 28 Abs. 3 lit. f DSGVO'],
    isRequired: true,
    defaultFrequency: 'ANNUAL',
  },
]

// ==========================================
// HELPER FUNCTIONS
// ==========================================

/**
 * Get all controls
 */
export function getAllControls(): Control[] {
  return CONTROLS_LIBRARY
}

/**
 * Get controls by domain
 */
export function getControlsByDomain(domain: ControlDomain): Control[] {
  return CONTROLS_LIBRARY.filter((c) => c.domain === domain)
}

/**
 * Get control by ID
 */
export function getControlById(id: string): Control | undefined {
  return CONTROLS_LIBRARY.find((c) => c.id === id)
}

/**
 * Get required controls
 */
export function getRequiredControls(): Control[] {
  return CONTROLS_LIBRARY.filter((c) => c.isRequired)
}

/**
 * Get controls by frequency
 */
export function getControlsByFrequency(frequency: ReviewFrequency): Control[] {
  return CONTROLS_LIBRARY.filter((c) => c.defaultFrequency === frequency)
}

/**
 * Get controls applicable to vendors
 */
export function getVendorControls(): Control[] {
  return CONTROLS_LIBRARY.filter((c) =>
    ['TRANSFER', 'AUDIT', 'DELETION', 'INCIDENT', 'SUBPROCESSOR', 'TOM', 'CONTRACT', 'DATA_SUBJECT', 'SECURITY', 'GOVERNANCE'].includes(c.domain)
  )
}

/**
 * Get controls applicable to processing activities
 */
export function getProcessingActivityControls(): Control[] {
  return CONTROLS_LIBRARY.filter((c) =>
    ['TOM', 'DATA_SUBJECT', 'GOVERNANCE', 'SECURITY'].includes(c.domain)
  )
}

/**
 * Group controls by domain
 */
export function getControlsGroupedByDomain(): Map<ControlDomain, Control[]> {
  const grouped = new Map<ControlDomain, Control[]>()

  for (const control of CONTROLS_LIBRARY) {
    const existing = grouped.get(control.domain) || []
    grouped.set(control.domain, [...existing, control])
  }

  return grouped
}

/**
 * Get domain metadata
 */
export function getControlDomainMeta(domain: ControlDomain): LocalizedText {
  const meta: Record<ControlDomain, LocalizedText> = {
    TRANSFER: { de: 'Drittlandtransfer', en: 'Third Country Transfer' },
    AUDIT: { de: 'Audit & Prüfung', en: 'Audit & Review' },
    DELETION: { de: 'Löschung', en: 'Deletion' },
    INCIDENT: { de: 'Incident Response', en: 'Incident Response' },
    SUBPROCESSOR: { de: 'Unterauftragnehmer', en: 'Sub-Processors' },
    TOM: { de: 'Technische/Org. Maßnahmen', en: 'Technical/Org. Measures' },
    CONTRACT: { de: 'Vertragliche Grundlagen', en: 'Contractual Basics' },
    DATA_SUBJECT: { de: 'Betroffenenrechte', en: 'Data Subject Rights' },
    SECURITY: { de: 'Sicherheit', en: 'Security' },
    GOVERNANCE: { de: 'Governance', en: 'Governance' },
  }

  return meta[domain]
}

/**
 * Calculate control coverage
 */
export function calculateControlCoverage(
  controlIds: string[],
  domain?: ControlDomain
): { covered: number; total: number; percentage: number } {
  const targetControls = domain
    ? getControlsByDomain(domain)
    : getRequiredControls()

  const covered = targetControls.filter((c) => controlIds.includes(c.id)).length

  return {
    covered,
    total: targetControls.length,
    percentage: targetControls.length > 0 ? Math.round((covered / targetControls.length) * 100) : 0,
  }
}
