/**
 * Contract Review Checklist Data
 *
 * Pure data arrays for AVV, Incident, Transfer, and SLA/Liability checklists.
 * Barrel-split from checklists.ts. Do NOT import directly; use checklists.ts.
 */

import { LocalizedText, FindingCategory } from '../types'

export interface ChecklistItem {
  id: string
  category: FindingCategory
  requirement: LocalizedText
  article: string
  description: LocalizedText
  checkPoints: LocalizedText[]
  isRequired: boolean
  severity: 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL'
}

// ==========================================
// ART. 28 DSGVO CHECKLIST
// ==========================================

export const AVV_CHECKLIST: ChecklistItem[] = [
  {
    id: 'art28_3_a',
    category: 'INSTRUCTION',
    requirement: { de: 'Weisungsgebundenheit', en: 'Instruction binding' },
    article: 'Art. 28 Abs. 3 lit. a DSGVO',
    description: {
      de: 'Der Auftragsverarbeiter verarbeitet personenbezogene Daten nur auf dokumentierte Weisung des Verantwortlichen.',
      en: 'The processor processes personal data only on documented instructions from the controller.',
    },
    checkPoints: [
      { de: 'Weisungsgebundenheit explizit vereinbart', en: 'Instruction binding explicitly agreed' },
      { de: 'Dokumentierte Weisungen vorgesehen', en: 'Documented instructions provided for' },
      { de: 'Hinweispflicht bei rechtswidrigen Weisungen', en: 'Obligation to notify of unlawful instructions' },
      { de: 'Keine eigenständige Verarbeitung erlaubt', en: 'No independent processing allowed' },
    ],
    isRequired: true,
    severity: 'CRITICAL',
  },
  {
    id: 'art28_3_b',
    category: 'CONFIDENTIALITY',
    requirement: { de: 'Vertraulichkeitsverpflichtung', en: 'Confidentiality obligation' },
    article: 'Art. 28 Abs. 3 lit. b DSGVO',
    description: {
      de: 'Der Auftragsverarbeiter gewährleistet, dass sich die zur Verarbeitung befugten Personen zur Vertraulichkeit verpflichtet haben.',
      en: 'The processor ensures that persons authorised to process personal data have committed themselves to confidentiality.',
    },
    checkPoints: [
      { de: 'Vertraulichkeitsverpflichtung der Mitarbeiter', en: 'Confidentiality obligation of employees' },
      { de: 'Gesetzliche Verschwiegenheitspflicht oder', en: 'Statutory confidentiality obligation or' },
      { de: 'Vertragliche Verpflichtung', en: 'Contractual obligation' },
    ],
    isRequired: true,
    severity: 'HIGH',
  },
  {
    id: 'art28_3_c',
    category: 'TOM',
    requirement: { de: 'Technische und organisatorische Maßnahmen', en: 'Technical and organisational measures' },
    article: 'Art. 28 Abs. 3 lit. c DSGVO',
    description: {
      de: 'Der Auftragsverarbeiter trifft alle gemäß Art. 32 erforderlichen Maßnahmen.',
      en: 'The processor takes all measures required pursuant to Art. 32.',
    },
    checkPoints: [
      { de: 'TOM-Anlage vorhanden', en: 'TOM annex present' },
      { de: 'TOM konkret und aktuell', en: 'TOM specific and current' },
      { de: 'Bezug zu Art. 32 DSGVO', en: 'Reference to Art. 32 GDPR' },
      { de: 'Aktualisierungspflicht vereinbart', en: 'Update obligation agreed' },
    ],
    isRequired: true,
    severity: 'CRITICAL',
  },
  {
    id: 'art28_3_d',
    category: 'SUBPROCESSOR',
    requirement: { de: 'Unterauftragsverarbeitung', en: 'Sub-processing' },
    article: 'Art. 28 Abs. 3 lit. d DSGVO',
    description: {
      de: 'Der Auftragsverarbeiter nimmt keinen weiteren Auftragsverarbeiter ohne vorherige Genehmigung in Anspruch.',
      en: 'The processor does not engage another processor without prior authorisation.',
    },
    checkPoints: [
      { de: 'Genehmigungserfordernis (allgemein oder spezifisch)', en: 'Authorisation requirement (general or specific)' },
      { de: 'Bei allgemeiner Genehmigung: Informationspflicht', en: 'With general authorisation: notification obligation' },
      { de: 'Einspruchsrecht des Verantwortlichen', en: 'Right of objection for controller' },
      { de: 'Liste aktueller Unterauftragnehmer', en: 'List of current sub-processors' },
      { de: 'Weitergabe der Pflichten an Unterauftragnehmer', en: 'Transfer of obligations to sub-processors' },
    ],
    isRequired: true,
    severity: 'CRITICAL',
  },
  {
    id: 'art28_3_e',
    category: 'DATA_SUBJECT_RIGHTS',
    requirement: { de: 'Unterstützung bei Betroffenenrechten', en: 'Assistance with data subject rights' },
    article: 'Art. 28 Abs. 3 lit. e DSGVO',
    description: {
      de: 'Der Auftragsverarbeiter unterstützt den Verantwortlichen bei der Erfüllung der Betroffenenrechte.',
      en: 'The processor assists the controller in fulfilling data subject rights obligations.',
    },
    checkPoints: [
      { de: 'Unterstützungspflicht vereinbart', en: 'Assistance obligation agreed' },
      { de: 'Verfahren zur Weiterleitung von Anfragen', en: 'Procedure for forwarding requests' },
      { de: 'Fristen für Unterstützung', en: 'Deadlines for assistance' },
      { de: 'Kostenregelung', en: 'Cost arrangement' },
    ],
    isRequired: true,
    severity: 'HIGH',
  },
  {
    id: 'art28_3_f',
    category: 'GENERAL',
    requirement: { de: 'Unterstützung bei DSFA und Konsultation', en: 'Assistance with DPIA and consultation' },
    article: 'Art. 28 Abs. 3 lit. f DSGVO',
    description: {
      de: 'Der Auftragsverarbeiter unterstützt den Verantwortlichen bei der Einhaltung der Pflichten gemäß Art. 32-36.',
      en: 'The processor assists the controller in ensuring compliance with obligations pursuant to Art. 32-36.',
    },
    checkPoints: [
      { de: 'Unterstützung bei DSFA', en: 'Assistance with DPIA' },
      { de: 'Unterstützung bei vorheriger Konsultation', en: 'Assistance with prior consultation' },
      { de: 'Bereitstellung notwendiger Informationen', en: 'Provision of necessary information' },
    ],
    isRequired: true,
    severity: 'MEDIUM',
  },
  {
    id: 'art28_3_g',
    category: 'DELETION',
    requirement: { de: 'Löschung/Rückgabe nach Vertragsende', en: 'Deletion/return after contract end' },
    article: 'Art. 28 Abs. 3 lit. g DSGVO',
    description: {
      de: 'Nach Abschluss der Verarbeitung werden alle personenbezogenen Daten gelöscht oder zurückgegeben.',
      en: 'After the end of processing, all personal data is deleted or returned.',
    },
    checkPoints: [
      { de: 'Löschung oder Rückgabe nach Wahl des Verantwortlichen', en: 'Deletion or return at controller choice' },
      { de: 'Frist für Löschung/Rückgabe (max. 30 Tage empfohlen)', en: 'Deadline for deletion/return (max. 30 days recommended)' },
      { de: 'Löschung auch bei Unterauftragnehmern', en: 'Deletion also at sub-processors' },
      { de: 'Löschbestätigung/Nachweis', en: 'Deletion confirmation/proof' },
      { de: 'Ausnahme nur bei gesetzlicher Aufbewahrungspflicht', en: 'Exception only for legal retention obligation' },
    ],
    isRequired: true,
    severity: 'CRITICAL',
  },
  {
    id: 'art28_3_h',
    category: 'AUDIT_RIGHTS',
    requirement: { de: 'Audit- und Inspektionsrechte', en: 'Audit and inspection rights' },
    article: 'Art. 28 Abs. 3 lit. h DSGVO',
    description: {
      de: 'Der Auftragsverarbeiter ermöglicht und unterstützt Überprüfungen durch den Verantwortlichen.',
      en: 'The processor enables and contributes to audits and inspections by the controller.',
    },
    checkPoints: [
      { de: 'Auditrecht ausdrücklich vereinbart', en: 'Audit right explicitly agreed' },
      { de: 'Vor-Ort-Inspektionen möglich', en: 'On-site inspections possible' },
      { de: 'Angemessene Vorlaufzeit (max. 30 Tage)', en: 'Reasonable notice period (max. 30 days)' },
      { de: 'Keine unangemessenen Einschränkungen', en: 'No unreasonable restrictions' },
      { de: 'Bereitstellung aller relevanten Informationen', en: 'Provision of all relevant information' },
      { de: 'Akzeptanz unabhängiger Prüfer', en: 'Acceptance of independent auditors' },
    ],
    isRequired: true,
    severity: 'HIGH',
  },
]

// ==========================================
// INCIDENT RESPONSE CHECKLIST
// ==========================================

export const INCIDENT_CHECKLIST: ChecklistItem[] = [
  {
    id: 'incident_notification',
    category: 'INCIDENT',
    requirement: { de: 'Meldung von Datenschutzverletzungen', en: 'Notification of data breaches' },
    article: 'Art. 33 Abs. 2 DSGVO',
    description: {
      de: 'Der Auftragsverarbeiter meldet dem Verantwortlichen unverzüglich jede Datenschutzverletzung.',
      en: 'The processor notifies the controller without undue delay of any personal data breach.',
    },
    checkPoints: [
      { de: 'Meldepflicht vereinbart', en: 'Notification obligation agreed' },
      { de: 'Frist: Unverzüglich (max. 24-48h empfohlen)', en: 'Deadline: Without undue delay (max. 24-48h recommended)' },
      { de: 'Mindestinhalt der Meldung definiert', en: 'Minimum content of notification defined' },
      { de: 'Kontaktstelle für Meldungen', en: 'Contact point for notifications' },
      { de: 'Unterstützung bei Dokumentation', en: 'Assistance with documentation' },
    ],
    isRequired: true,
    severity: 'CRITICAL',
  },
  {
    id: 'incident_content',
    category: 'INCIDENT',
    requirement: { de: 'Inhalt der Incident-Meldung', en: 'Content of incident notification' },
    article: 'Art. 33 Abs. 3 DSGVO',
    description: {
      de: 'Die Meldung muss bestimmte Mindestinformationen enthalten.',
      en: 'The notification must contain certain minimum information.',
    },
    checkPoints: [
      { de: 'Art der Verletzung', en: 'Nature of the breach' },
      { de: 'Betroffene Datenkategorien', en: 'Affected data categories' },
      { de: 'Ungefähre Anzahl betroffener Personen', en: 'Approximate number of affected persons' },
      { de: 'Wahrscheinliche Folgen', en: 'Likely consequences' },
      { de: 'Ergriffene Maßnahmen', en: 'Measures taken' },
    ],
    isRequired: true,
    severity: 'HIGH',
  },
]

// ==========================================
// THIRD COUNTRY TRANSFER CHECKLIST
// ==========================================

export const TRANSFER_CHECKLIST: ChecklistItem[] = [
  {
    id: 'transfer_basis',
    category: 'TRANSFER',
    requirement: { de: 'Rechtsgrundlage für Drittlandtransfer', en: 'Legal basis for third country transfer' },
    article: 'Art. 44-49 DSGVO',
    description: {
      de: 'Drittlandtransfers nur auf Basis geeigneter Garantien.',
      en: 'Third country transfers only on the basis of appropriate safeguards.',
    },
    checkPoints: [
      { de: 'Angemessenheitsbeschluss oder', en: 'Adequacy decision or' },
      { de: 'Standardvertragsklauseln (SCC) oder', en: 'Standard contractual clauses (SCC) or' },
      { de: 'Binding Corporate Rules (BCR) oder', en: 'Binding Corporate Rules (BCR) or' },
      { de: 'Sonstige Ausnahme Art. 49', en: 'Other derogation Art. 49' },
    ],
    isRequired: true,
    severity: 'CRITICAL',
  },
  {
    id: 'transfer_scc',
    category: 'TRANSFER',
    requirement: { de: 'Standardvertragsklauseln', en: 'Standard Contractual Clauses' },
    article: 'Art. 46 Abs. 2 lit. c DSGVO',
    description: {
      de: 'Bei SCC: Verwendung der aktuellen EU-Kommission-Klauseln.',
      en: 'With SCC: Use of current EU Commission clauses.',
    },
    checkPoints: [
      { de: 'SCC 2021 verwendet', en: 'SCC 2021 used' },
      { de: 'Korrektes Modul gewählt', en: 'Correct module selected' },
      { de: 'Anhänge vollständig ausgefüllt', en: 'Annexes completely filled out' },
      { de: 'TIA durchgeführt (bei Risiko)', en: 'TIA conducted (if risk)' },
      { de: 'Zusätzliche Maßnahmen dokumentiert', en: 'Additional measures documented' },
    ],
    isRequired: false,
    severity: 'HIGH',
  },
  {
    id: 'transfer_tia',
    category: 'TRANSFER',
    requirement: { de: 'Transfer Impact Assessment', en: 'Transfer Impact Assessment' },
    article: 'Schrems II, EDSA 01/2020',
    description: {
      de: 'Bewertung der Risiken im Drittland.',
      en: 'Assessment of risks in the third country.',
    },
    checkPoints: [
      { de: 'Rechtslage im Drittland analysiert', en: 'Legal situation in third country analyzed' },
      { de: 'Zugriff durch Behörden bewertet', en: 'Access by authorities assessed' },
      { de: 'Zusätzliche technische Maßnahmen', en: 'Additional technical measures' },
      { de: 'Dokumentation der Bewertung', en: 'Documentation of assessment' },
    ],
    isRequired: true,
    severity: 'HIGH',
  },
]

// ==========================================
// SLA & LIABILITY CHECKLIST
// ==========================================

export const SLA_LIABILITY_CHECKLIST: ChecklistItem[] = [
  {
    id: 'sla_availability',
    category: 'SLA',
    requirement: { de: 'Verfügbarkeit', en: 'Availability' },
    article: 'Vertragliche Vereinbarung',
    description: {
      de: 'Service Level Agreement für Verfügbarkeit des Dienstes.',
      en: 'Service Level Agreement for service availability.',
    },
    checkPoints: [
      { de: 'Verfügbarkeit definiert (z.B. 99,9%)', en: 'Availability defined (e.g., 99.9%)' },
      { de: 'Messzeitraum festgelegt', en: 'Measurement period defined' },
      { de: 'Ausnahmen klar definiert', en: 'Exceptions clearly defined' },
      { de: 'Konsequenzen bei Nichteinhaltung', en: 'Consequences of non-compliance' },
    ],
    isRequired: false,
    severity: 'MEDIUM',
  },
  {
    id: 'liability_cap',
    category: 'LIABILITY',
    requirement: { de: 'Haftungsbegrenzung', en: 'Liability cap' },
    article: 'Vertragliche Vereinbarung',
    description: {
      de: 'Prüfung von Haftungsbegrenzungen und deren Auswirkungen.',
      en: 'Review of liability caps and their implications.',
    },
    checkPoints: [
      { de: 'Haftungshöchstgrenze prüfen', en: 'Check liability cap' },
      { de: 'Ausschluss von Vorsatz/grober Fahrlässigkeit', en: 'Exclusion of intent/gross negligence' },
      { de: 'Freistellungsklauseln (Indemnity)', en: 'Indemnification clauses' },
      { de: 'Versicherungsnachweis', en: 'Insurance proof' },
    ],
    isRequired: false,
    severity: 'MEDIUM',
  },
]
