/**
 * Loeschfristen Baseline-Katalog
 *
 * 18 vordefinierte Aufbewahrungsfristen-Templates fuer gaengige
 * Datenobjekte in deutschen Unternehmen. Basierend auf AO, HGB,
 * UStG, BGB, ArbZG, AGG, BDSG und BSIG.
 *
 * Werden genutzt, um neue Loeschfrist-Policies schnell aus
 * bewaehrten Vorlagen zu erstellen.
 */

import type {
  LoeschfristPolicy,
  RetentionDriverType,
  DeletionMethodType,
  StorageLocation,
  PolicyStatus,
  ReviewInterval,
  RetentionUnit,
  DeletionTriggerLevel,
} from './loeschfristen-types'

import { createEmptyPolicy } from './loeschfristen-types'

// =============================================================================
// BASELINE TEMPLATE INTERFACE
// =============================================================================

export interface BaselineTemplate {
  templateId: string
  dataObjectName: string
  description: string
  affectedGroups: string[]
  dataCategories: string[]
  primaryPurpose: string
  deletionTrigger: DeletionTriggerLevel
  retentionDriver: RetentionDriverType | null
  retentionDriverDetail: string
  retentionDuration: number | null
  retentionUnit: RetentionUnit | null
  retentionDescription: string
  startEvent: string
  deletionMethod: DeletionMethodType
  deletionMethodDetail: string
  responsibleRole: string
  reviewInterval: ReviewInterval
  tags: string[]
}

// =============================================================================
// BASELINE TEMPLATES (18 Vorlagen)
// =============================================================================

export const BASELINE_TEMPLATES: BaselineTemplate[] = [
  // ==================== 1. Personalakten ====================
  {
    templateId: 'personal-akten',
    dataObjectName: 'Personalakten',
    description:
      'Vollstaendige Personalakten inkl. Arbeitsvertraege, Zeugnisse, Abmahnungen und sonstige beschaeftigungsrelevante Dokumente.',
    affectedGroups: ['Mitarbeiter'],
    dataCategories: ['Stammdaten', 'Vertragsdaten', 'Gehaltsdaten', 'Zeugnisse'],
    primaryPurpose:
      'Dokumentation und Nachweisfuehrung des Beschaeftigungsverhaeltnisses sowie Erfuellung steuerrechtlicher Aufbewahrungspflichten.',
    deletionTrigger: 'RETENTION_DRIVER',
    retentionDriver: 'AO_147',
    retentionDriverDetail:
      'Aufbewahrungspflicht gemaess 147 AO fuer steuerlich relevante Unterlagen der Personalakte.',
    retentionDuration: 10,
    retentionUnit: 'YEARS',
    retentionDescription: '10 Jahre nach Ende des Beschaeftigungsverhaeltnisses',
    startEvent: 'Ende des Beschaeftigungsverhaeltnisses',
    deletionMethod: 'AUTO_DELETE',
    deletionMethodDetail:
      'Automatische Loeschung aller digitalen Personalakten-Dokumente nach Ablauf der Aufbewahrungsfrist. Papierakten werden datenschutzkonform vernichtet.',
    responsibleRole: 'HR-Abteilung',
    reviewInterval: 'ANNUAL',
    tags: ['hr', 'steuer'],
  },

  // ==================== 2. Buchhaltungsbelege ====================
  {
    templateId: 'buchhaltungsbelege',
    dataObjectName: 'Buchhaltungsbelege',
    description:
      'Buchungsbelege, Kontoauszuege, Kassenbuecher und sonstige Belege der laufenden Buchhaltung.',
    affectedGroups: ['Kunden', 'Lieferanten'],
    dataCategories: ['Finanzdaten', 'Transaktionsdaten', 'Kontodaten'],
    primaryPurpose:
      'Ordnungsgemaesse Buchfuehrung und Erfuellung handelsrechtlicher Aufbewahrungspflichten nach HGB.',
    deletionTrigger: 'RETENTION_DRIVER',
    retentionDriver: 'HGB_257',
    retentionDriverDetail:
      'Aufbewahrungspflicht gemaess 257 HGB fuer Handelsbuecher und Buchungsbelege.',
    retentionDuration: 10,
    retentionUnit: 'YEARS',
    retentionDescription: '10 Jahre nach Ende des Geschaeftsjahres',
    startEvent: 'Ende des Geschaeftsjahres',
    deletionMethod: 'MANUAL_REVIEW_DELETE',
    deletionMethodDetail:
      'Manuelle Pruefung durch die Buchhaltung vor Loeschung, um sicherzustellen, dass keine laufenden Pruefungen oder Rechtsstreitigkeiten bestehen.',
    responsibleRole: 'Buchhaltung',
    reviewInterval: 'ANNUAL',
    tags: ['finanzen', 'hgb'],
  },

  // ==================== 3. Rechnungen ====================
  {
    templateId: 'rechnungen',
    dataObjectName: 'Rechnungen',
    description:
      'Eingangs- und Ausgangsrechnungen inkl. Rechnungsanhaenge und rechnungsbegruendende Unterlagen.',
    affectedGroups: ['Kunden', 'Lieferanten'],
    dataCategories: ['Rechnungsdaten', 'Umsatzsteuerdaten', 'Adressdaten'],
    primaryPurpose:
      'Dokumentation umsatzsteuerrelevanter Vorgaenge und Erfuellung der Aufbewahrungspflicht nach UStG.',
    deletionTrigger: 'RETENTION_DRIVER',
    retentionDriver: 'USTG_14B',
    retentionDriverDetail:
      'Aufbewahrungspflicht gemaess 14b UStG fuer Rechnungen und rechnungsbegruendende Unterlagen.',
    retentionDuration: 10,
    retentionUnit: 'YEARS',
    retentionDescription: '10 Jahre ab Rechnungsdatum',
    startEvent: 'Rechnungsdatum',
    deletionMethod: 'AUTO_DELETE',
    deletionMethodDetail:
      'Automatische Loeschung nach Ablauf der 10-Jahres-Frist. Vor Loeschung wird geprueft, ob Rechnungen in laufenden Betriebspruefungen benoetigt werden.',
    responsibleRole: 'Buchhaltung',
    reviewInterval: 'ANNUAL',
    tags: ['finanzen', 'ustg'],
  },

  // ==================== 4. Geschaeftsbriefe ====================
  {
    templateId: 'geschaeftsbriefe',
    dataObjectName: 'Geschaeftsbriefe',
    description:
      'Empfangene und versandte Handelsbriefe, Geschaeftskorrespondenz und geschaeftsrelevante E-Mails.',
    affectedGroups: ['Kunden', 'Lieferanten'],
    dataCategories: ['Korrespondenz', 'Vertragskommunikation', 'Angebote'],
    primaryPurpose:
      'Nachweisfuehrung geschaeftlicher Kommunikation und Erfuellung der handelsrechtlichen Aufbewahrungspflicht fuer Handelsbriefe.',
    deletionTrigger: 'RETENTION_DRIVER',
    retentionDriver: 'HGB_257',
    retentionDriverDetail:
      'Aufbewahrungspflicht gemaess 257 HGB fuer empfangene und versandte Handelsbriefe (6 Jahre).',
    retentionDuration: 6,
    retentionUnit: 'YEARS',
    retentionDescription: '6 Jahre ab Eingang oder Versand des Geschaeftsbriefes',
    startEvent: 'Eingang bzw. Versand des Geschaeftsbriefes',
    deletionMethod: 'MANUAL_REVIEW_DELETE',
    deletionMethodDetail:
      'Manuelle Pruefung durch die Geschaeftsleitung, da Geschaeftsbriefe ggf. als Beweismittel in Rechtsstreitigkeiten dienen koennen.',
    responsibleRole: 'Geschaeftsleitung',
    reviewInterval: 'ANNUAL',
    tags: ['kommunikation', 'hgb'],
  },

  // ==================== 5. Bewerbungsunterlagen ====================
  {
    templateId: 'bewerbungsunterlagen',
    dataObjectName: 'Bewerbungsunterlagen',
    description:
      'Eingereichte Bewerbungsunterlagen inkl. Anschreiben, Lebenslauf, Zeugnisse und Korrespondenz mit Bewerbern.',
    affectedGroups: ['Bewerber'],
    dataCategories: ['Bewerbungsdaten', 'Qualifikationen', 'Kontaktdaten'],
    primaryPurpose:
      'Durchfuehrung des Bewerbungsverfahrens und Absicherung gegen Entschaedigungsansprueche nach dem AGG.',
    deletionTrigger: 'RETENTION_DRIVER',
    retentionDriver: 'AGG_15',
    retentionDriverDetail:
      'Aufbewahrung fuer 6 Monate nach Absage gemaess 15 Abs. 4 AGG (Frist fuer Geltendmachung von Entschaedigungsanspruechen).',
    retentionDuration: 6,
    retentionUnit: 'MONTHS',
    retentionDescription: '6 Monate nach Absage oder Stellenbesetzung',
    startEvent: 'Absage oder endgueltige Stellenbesetzung',
    deletionMethod: 'AUTO_DELETE',
    deletionMethodDetail:
      'Automatische Loeschung aller Bewerbungsunterlagen und zugehoeriger Kommunikation nach Ablauf der 6-Monats-Frist.',
    responsibleRole: 'HR-Abteilung',
    reviewInterval: 'QUARTERLY',
    tags: ['hr', 'bewerbung'],
  },

  // ==================== 6. Kundenstammdaten ====================
  {
    templateId: 'kundenstammdaten',
    dataObjectName: 'Kundenstammdaten',
    description:
      'Stammdaten von Kunden inkl. Kontaktdaten, Anschrift, Kundennummer und Kommunikationspraeferenzen.',
    affectedGroups: ['Kunden'],
    dataCategories: ['Stammdaten', 'Kontaktdaten', 'Adressdaten'],
    primaryPurpose:
      'Pflege der Kundenbeziehung, Vertragserfuellung und Absicherung gegen Verjaehrung vertraglicher Ansprueche.',
    deletionTrigger: 'RETENTION_DRIVER',
    retentionDriver: 'BGB_195',
    retentionDriverDetail:
      'Aufbewahrung fuer die Dauer der regelmaessigen Verjaehrungsfrist gemaess 195 BGB (3 Jahre).',
    retentionDuration: 3,
    retentionUnit: 'YEARS',
    retentionDescription: '3 Jahre nach letzter geschaeftlicher Interaktion',
    startEvent: 'Letzte geschaeftliche Interaktion mit dem Kunden',
    deletionMethod: 'MANUAL_REVIEW_DELETE',
    deletionMethodDetail:
      'Manuelle Pruefung durch den Vertrieb vor Loeschung, um sicherzustellen, dass keine aktiven Geschaeftsbeziehungen oder offenen Forderungen bestehen.',
    responsibleRole: 'Vertrieb',
    reviewInterval: 'ANNUAL',
    tags: ['crm', 'kunden'],
  },

  // ==================== 7. Newsletter-Einwilligungen ====================
  {
    templateId: 'newsletter-einwilligungen',
    dataObjectName: 'Newsletter-Einwilligungen',
    description:
      'Einwilligungserklaerungen fuer den Newsletter-Versand inkl. Double-Opt-in-Nachweis und Abmeldezeitpunkt.',
    affectedGroups: ['Abonnenten'],
    dataCategories: ['Einwilligungsdaten', 'E-Mail-Adresse', 'Opt-in-Nachweis'],
    primaryPurpose:
      'Nachweis der wirksamen Einwilligung zum Newsletter-Versand gemaess Art. 7 DSGVO und Dokumentation des Widerrufs.',
    deletionTrigger: 'PURPOSE_END',
    retentionDriver: null,
    retentionDriverDetail:
      'Keine gesetzliche Aufbewahrungspflicht. Daten werden bis zum Widerruf der Einwilligung gespeichert.',
    retentionDuration: null,
    retentionUnit: null,
    retentionDescription: 'Bis zum Widerruf der Einwilligung durch den Abonnenten',
    startEvent: 'Widerruf der Einwilligung durch den Abonnenten',
    deletionMethod: 'AUTO_DELETE',
    deletionMethodDetail:
      'Automatische Loeschung der personenbezogenen Daten nach Eingang des Widerrufs. Der Einwilligungsnachweis selbst wird fuer die Dauer der Nachweispflicht aufbewahrt.',
    responsibleRole: 'Marketing',
    reviewInterval: 'SEMI_ANNUAL',
    tags: ['marketing', 'einwilligung'],
  },

  // ==================== 8. Webserver-Logs ====================
  {
    templateId: 'webserver-logs',
    dataObjectName: 'Webserver-Logs',
    description:
      'Server-Zugriffsprotokolle inkl. IP-Adressen, Zeitstempel, aufgerufene URLs und HTTP-Statuscodes.',
    affectedGroups: ['Website-Besucher'],
    dataCategories: ['IP-Adressen', 'Zugriffszeitpunkte', 'User-Agent-Daten'],
    primaryPurpose:
      'Sicherstellung der IT-Sicherheit, Erkennung von Angriffen und Stoerungen sowie Erfuellung der Protokollierungspflicht nach BSIG.',
    deletionTrigger: 'RETENTION_DRIVER',
    retentionDriver: 'BSIG',
    retentionDriverDetail:
      'Aufbewahrung gemaess BSI-Gesetz / IT-Sicherheitsgesetz 2.0 fuer die Analyse von Sicherheitsvorfaellen.',
    retentionDuration: 7,
    retentionUnit: 'DAYS',
    retentionDescription: '7 Tage nach Zeitpunkt des Zugriffs',
    startEvent: 'Zeitpunkt des Server-Zugriffs',
    deletionMethod: 'AUTO_DELETE',
    deletionMethodDetail:
      'Automatische Rotation und Loeschung der Logdateien nach 7 Tagen durch den Webserver (logrotate).',
    responsibleRole: 'IT-Abteilung',
    reviewInterval: 'QUARTERLY',
    tags: ['it', 'logs'],
  },

  // ==================== 9. Videoueberwachung ====================
  {
    templateId: 'videoueberwachung',
    dataObjectName: 'Videoueberwachung',
    description:
      'Aufnahmen der Videoueberwachung in Geschaeftsraeumen, Eingangsbereichen und Parkplaetzen.',
    affectedGroups: ['Besucher', 'Mitarbeiter'],
    dataCategories: ['Videodaten', 'Bilddaten', 'Zeitstempel'],
    primaryPurpose:
      'Schutz des Eigentums und der Sicherheit von Personen sowie Aufklaerung von Vorfaellen in den ueberwachten Bereichen.',
    deletionTrigger: 'RETENTION_DRIVER',
    retentionDriver: 'BDSG_35',
    retentionDriverDetail:
      'Unverzuegliche Loeschung nach Zweckwegfall gemaess 35 BDSG bzw. Art. 17 DSGVO. Maximale Speicherdauer 48 Stunden.',
    retentionDuration: 2,
    retentionUnit: 'DAYS',
    retentionDescription: '48 Stunden (2 Tage) nach Aufnahmezeitpunkt',
    startEvent: 'Aufnahmezeitpunkt der Videosequenz',
    deletionMethod: 'AUTO_DELETE',
    deletionMethodDetail:
      'Automatisches Ueberschreiben der Aufnahmen durch das Videomanagementsystem nach Ablauf der 48-Stunden-Frist.',
    responsibleRole: 'Facility Management',
    reviewInterval: 'QUARTERLY',
    tags: ['sicherheit', 'video'],
  },

  // ==================== 10. Gehaltsabrechnungen ====================
  {
    templateId: 'gehaltsabrechnungen',
    dataObjectName: 'Gehaltsabrechnungen',
    description:
      'Monatliche Gehaltsabrechnungen, Lohnsteuerbescheinigungen und Sozialversicherungsmeldungen.',
    affectedGroups: ['Mitarbeiter'],
    dataCategories: ['Gehaltsdaten', 'Steuerdaten', 'Sozialversicherungsdaten'],
    primaryPurpose:
      'Dokumentation der Lohn- und Gehaltszahlungen sowie Erfuellung steuerrechtlicher und sozialversicherungsrechtlicher Aufbewahrungspflichten.',
    deletionTrigger: 'RETENTION_DRIVER',
    retentionDriver: 'AO_147',
    retentionDriverDetail:
      'Aufbewahrungspflicht gemaess 147 AO fuer lohnsteuerrelevante Unterlagen und Gehaltsbuchungen.',
    retentionDuration: 10,
    retentionUnit: 'YEARS',
    retentionDescription: '10 Jahre nach Ende des Geschaeftsjahres',
    startEvent: 'Ende des Geschaeftsjahres der jeweiligen Abrechnung',
    deletionMethod: 'AUTO_DELETE',
    deletionMethodDetail:
      'Automatische Loeschung der digitalen Gehaltsabrechnungen nach Ablauf der Aufbewahrungsfrist. Papierbelege werden datenschutzkonform vernichtet.',
    responsibleRole: 'Lohnbuchhaltung',
    reviewInterval: 'ANNUAL',
    tags: ['hr', 'steuer'],
  },

  // ==================== 11. Vertraege ====================
  {
    templateId: 'vertraege',
    dataObjectName: 'Vertraege',
    description:
      'Geschaeftsvertraege, Rahmenvereinbarungen, Dienstleistungsvertraege und zugehoerige Anlagen und Nachtraege.',
    affectedGroups: ['Vertragspartner'],
    dataCategories: ['Vertragsdaten', 'Kontaktdaten', 'Konditionen'],
    primaryPurpose:
      'Dokumentation vertraglicher Vereinbarungen und Sicherung von Beweismitteln fuer die Dauer moeglicher Rechtsstreitigkeiten.',
    deletionTrigger: 'RETENTION_DRIVER',
    retentionDriver: 'HGB_257',
    retentionDriverDetail:
      'Aufbewahrungspflicht gemaess 257 HGB fuer handelsrechtlich relevante Vertragsunterlagen.',
    retentionDuration: 10,
    retentionUnit: 'YEARS',
    retentionDescription: '10 Jahre nach Ende der Vertragslaufzeit',
    startEvent: 'Ende der Vertragslaufzeit bzw. Vertragsbeendigung',
    deletionMethod: 'MANUAL_REVIEW_DELETE',
    deletionMethodDetail:
      'Manuelle Pruefung durch die Rechtsabteilung vor Loeschung, um sicherzustellen, dass keine laufenden oder angedrohten Rechtsstreitigkeiten bestehen.',
    responsibleRole: 'Rechtsabteilung',
    reviewInterval: 'ANNUAL',
    tags: ['recht', 'vertraege'],
  },

  // ==================== 12. Zeiterfassungsdaten ====================
  {
    templateId: 'zeiterfassung',
    dataObjectName: 'Zeiterfassungsdaten',
    description:
      'Arbeitszeitaufzeichnungen inkl. Beginn, Ende, Pausen und Ueberstunden der Beschaeftigten.',
    affectedGroups: ['Mitarbeiter'],
    dataCategories: ['Arbeitszeiten', 'Pausenzeiten', 'Ueberstunden'],
    primaryPurpose:
      'Erfuellung der gesetzlichen Aufzeichnungspflicht fuer Arbeitszeiten und Nachweis der Einhaltung des Arbeitszeitgesetzes.',
    deletionTrigger: 'RETENTION_DRIVER',
    retentionDriver: 'ARBZG_16',
    retentionDriverDetail:
      'Aufbewahrungspflicht gemaess 16 Abs. 2 ArbZG fuer Aufzeichnungen ueber die Arbeitszeit.',
    retentionDuration: 2,
    retentionUnit: 'YEARS',
    retentionDescription: '2 Jahre nach Ende des Erfassungszeitraums',
    startEvent: 'Ende des jeweiligen Erfassungszeitraums',
    deletionMethod: 'AUTO_DELETE',
    deletionMethodDetail:
      'Automatische Loeschung der Zeiterfassungsdaten nach Ablauf der 2-Jahres-Frist im Zeiterfassungssystem.',
    responsibleRole: 'HR-Abteilung',
    reviewInterval: 'ANNUAL',
    tags: ['hr', 'arbzg'],
  },

  // ==================== 13. Krankmeldungen ====================
  {
    templateId: 'krankmeldungen',
    dataObjectName: 'Krankmeldungen',
    description:
      'Arbeitsunfaehigkeitsbescheinigungen, Krankmeldungen und zugehoerige Abwesenheitsdokumentationen.',
    affectedGroups: ['Mitarbeiter'],
    dataCategories: ['Gesundheitsdaten', 'Abwesenheitszeiten', 'AU-Bescheinigungen'],
    primaryPurpose:
      'Dokumentation von Fehlzeiten, Entgeltfortzahlung im Krankheitsfall und Absicherung gegen Verjaehrung arbeitsrechtlicher Ansprueche.',
    deletionTrigger: 'RETENTION_DRIVER',
    retentionDriver: 'BGB_195',
    retentionDriverDetail:
      'Aufbewahrung fuer die Dauer der regelmaessigen Verjaehrungsfrist gemaess 195 BGB zur Absicherung von Erstattungsanspruechen.',
    retentionDuration: 3,
    retentionUnit: 'YEARS',
    retentionDescription: '3 Jahre nach Ende des Beschaeftigungsverhaeltnisses',
    startEvent: 'Ende des Beschaeftigungsverhaeltnisses',
    deletionMethod: 'MANUAL_REVIEW_DELETE',
    deletionMethodDetail:
      'Manuelle Pruefung durch die HR-Abteilung vor Loeschung, da Krankmeldungen besondere Kategorien personenbezogener Daten (Gesundheitsdaten) enthalten.',
    responsibleRole: 'HR-Abteilung',
    reviewInterval: 'ANNUAL',
    tags: ['hr', 'gesundheit'],
  },

  // ==================== 14. Steuererklaerungen ====================
  {
    templateId: 'steuererklaerungen',
    dataObjectName: 'Steuererklaerungen',
    description:
      'Koerperschaftsteuer-, Gewerbesteuer- und Umsatzsteuererklaerungen inkl. Anlagen und Bescheide.',
    affectedGroups: ['Unternehmen'],
    dataCategories: ['Steuerdaten', 'Finanzkennzahlen', 'Bescheide'],
    primaryPurpose:
      'Erfuellung steuerrechtlicher Dokumentationspflichten und Nachweisfuehrung gegenueber den Finanzbehoerden.',
    deletionTrigger: 'RETENTION_DRIVER',
    retentionDriver: 'AO_147',
    retentionDriverDetail:
      'Aufbewahrungspflicht gemaess 147 AO fuer Steuererklaerungen und zugehoerige Unterlagen.',
    retentionDuration: 10,
    retentionUnit: 'YEARS',
    retentionDescription: '10 Jahre ab dem jeweiligen Steuerjahr',
    startEvent: 'Ende des betreffenden Steuerjahres',
    deletionMethod: 'AUTO_DELETE',
    deletionMethodDetail:
      'Automatische Loeschung nach Ablauf der 10-Jahres-Frist, sofern keine laufende Betriebspruefung oder Einspruchsverfahren vorliegen.',
    responsibleRole: 'Steuerberater/Buchhaltung',
    reviewInterval: 'ANNUAL',
    tags: ['finanzen', 'steuer'],
  },

  // ==================== 15. Gesellschafterprotokolle ====================
  {
    templateId: 'protokolle-gesellschafter',
    dataObjectName: 'Gesellschafterprotokolle',
    description:
      'Protokolle der Gesellschafterversammlungen, Beschluesse, Abstimmungsergebnisse und notarielle Urkunden.',
    affectedGroups: ['Gesellschafter'],
    dataCategories: ['Beschlussdaten', 'Abstimmungsergebnisse', 'Protokolle'],
    primaryPurpose:
      'Dokumentation gesellschaftsrechtlicher Beschluesse und Erfuellung handelsrechtlicher Aufbewahrungspflichten.',
    deletionTrigger: 'RETENTION_DRIVER',
    retentionDriver: 'HGB_257',
    retentionDriverDetail:
      'Aufbewahrungspflicht gemaess 257 HGB fuer Eroeffnungsbilanzen, Jahresabschluesse und zugehoerige Beschluesse.',
    retentionDuration: 10,
    retentionUnit: 'YEARS',
    retentionDescription: '10 Jahre ab Beschlussdatum',
    startEvent: 'Datum des jeweiligen Gesellschafterbeschlusses',
    deletionMethod: 'PHYSICAL_DESTROY',
    deletionMethodDetail:
      'Physische Vernichtung der Papieroriginale durch zertifizierten Aktenvernichtungsdienstleister (DIN 66399, Sicherheitsstufe P-4). Digitale Kopien werden parallel geloescht.',
    responsibleRole: 'Geschaeftsleitung',
    reviewInterval: 'ANNUAL',
    tags: ['recht', 'gesellschaft'],
  },

  // ==================== 16. CRM-Kontakthistorie ====================
  {
    templateId: 'crm-kontakthistorie',
    dataObjectName: 'CRM-Kontakthistorie',
    description:
      'Kontaktverlauf im CRM-System inkl. Anrufe, E-Mails, Termine, Notizen und Angebotsverlauf.',
    affectedGroups: ['Kunden', 'Interessenten'],
    dataCategories: ['Kommunikationsdaten', 'Interaktionshistorie', 'Angebotsdaten'],
    primaryPurpose:
      'Pflege der Kundenbeziehung und Nachverfolgung geschaeftlicher Interaktionen fuer Vertriebs- und Servicezwecke.',
    deletionTrigger: 'RETENTION_DRIVER',
    retentionDriver: 'BGB_195',
    retentionDriverDetail:
      'Aufbewahrung fuer die Dauer der regelmaessigen Verjaehrungsfrist gemaess 195 BGB zur Absicherung vertraglicher Ansprueche.',
    retentionDuration: 3,
    retentionUnit: 'YEARS',
    retentionDescription: '3 Jahre nach letztem Kontakt mit dem Kunden oder Interessenten',
    startEvent: 'Letzter dokumentierter Kontakt im CRM-System',
    deletionMethod: 'ANONYMIZATION',
    deletionMethodDetail:
      'Anonymisierung der personenbezogenen Daten im CRM-System, sodass statistische Auswertungen weiterhin moeglich sind, aber kein Personenbezug mehr hergestellt werden kann.',
    responsibleRole: 'Vertrieb',
    reviewInterval: 'SEMI_ANNUAL',
    tags: ['crm', 'kunden'],
  },

  // ==================== 17. Backup-Daten ====================
  {
    templateId: 'backup-daten',
    dataObjectName: 'Backup-Daten',
    description:
      'Vollstaendige und inkrementelle Sicherungskopien aller Systeme, Datenbanken und Dateisysteme.',
    affectedGroups: ['Alle Betroffenengruppen'],
    dataCategories: ['Systemsicherungen', 'Datenbankkopien', 'Dateisystemsicherungen'],
    primaryPurpose:
      'Sicherstellung der Datenwiederherstellung im Katastrophenfall und Gewaehrleistung der Geschaeftskontinuitaet.',
    deletionTrigger: 'RETENTION_DRIVER',
    retentionDriver: 'BSIG',
    retentionDriverDetail:
      'Aufbewahrung von Backups fuer 90 Tage gemaess BSI-Grundschutz-Empfehlungen zur Sicherstellung der Wiederherstellbarkeit.',
    retentionDuration: 90,
    retentionUnit: 'DAYS',
    retentionDescription: '90 Tage nach Erstellung des Backups',
    startEvent: 'Erstellungsdatum des jeweiligen Backups',
    deletionMethod: 'CRYPTO_ERASE',
    deletionMethodDetail:
      'Kryptographische Loeschung durch Vernichtung der Verschluesselungsschluessel, sodass die verschluesselten Backup-Daten nicht mehr entschluesselt werden koennen.',
    responsibleRole: 'IT-Abteilung',
    reviewInterval: 'QUARTERLY',
    tags: ['it', 'backup'],
  },

  // ==================== 18. Cookie-Consent-Nachweise ====================
  {
    templateId: 'cookie-consent-logs',
    dataObjectName: 'Cookie-Consent-Nachweise',
    description:
      'Nachweise ueber Cookie-Einwilligungen der Website-Besucher inkl. Consent-ID, Zeitstempel, gesetzte Praeferenzen und IP-Adresse.',
    affectedGroups: ['Website-Besucher'],
    dataCategories: ['Consent-Daten', 'IP-Adressen', 'Zeitstempel', 'Praeferenzen'],
    primaryPurpose:
      'Nachweisfuehrung der Einwilligung in die Cookie-Nutzung gemaess Art. 7 Abs. 1 DSGVO und ePrivacy-Richtlinie.',
    deletionTrigger: 'RETENTION_DRIVER',
    retentionDriver: 'BGB_195',
    retentionDriverDetail:
      'Aufbewahrung der Consent-Nachweise fuer die Dauer der regelmaessigen Verjaehrungsfrist gemaess 195 BGB zur Absicherung gegen Abmahnungen.',
    retentionDuration: 3,
    retentionUnit: 'YEARS',
    retentionDescription: '3 Jahre nach Zeitpunkt der Einwilligung',
    startEvent: 'Zeitpunkt der Cookie-Einwilligung (Consent-Zeitstempel)',
    deletionMethod: 'AUTO_DELETE',
    deletionMethodDetail:
      'Automatische Loeschung der Consent-Nachweise nach Ablauf der 3-Jahres-Frist durch das Consent-Management-System.',
    responsibleRole: 'Datenschutzbeauftragter',
    reviewInterval: 'ANNUAL',
    tags: ['datenschutz', 'consent'],
  },
]

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

/**
 * Erstellt eine vollstaendige LoeschfristPolicy aus einem BaselineTemplate.
 * Nutzt createEmptyPolicy() als Basis und ueberlagert die Template-Felder.
 */
export function templateToPolicy(template: BaselineTemplate): LoeschfristPolicy {
  const base = createEmptyPolicy()

  return {
    ...base,
    dataObjectName: template.dataObjectName,
    description: template.description,
    affectedGroups: [...template.affectedGroups],
    dataCategories: [...template.dataCategories],
    primaryPurpose: template.primaryPurpose,
    deletionTrigger: template.deletionTrigger,
    retentionDriver: template.retentionDriver,
    retentionDriverDetail: template.retentionDriverDetail,
    retentionDuration: template.retentionDuration,
    retentionUnit: template.retentionUnit,
    retentionDescription: template.retentionDescription,
    startEvent: template.startEvent,
    deletionMethod: template.deletionMethod,
    deletionMethodDetail: template.deletionMethodDetail,
    responsibleRole: template.responsibleRole,
    reviewInterval: template.reviewInterval,
    tags: [...template.tags],
  }
}

/**
 * Gibt alle Templates zurueck, die einen bestimmten Tag enthalten.
 */
export function getTemplatesByTag(tag: string): BaselineTemplate[] {
  return BASELINE_TEMPLATES.filter(t => t.tags.includes(tag))
}

/**
 * Findet ein Template anhand seiner templateId.
 */
export function getTemplateById(templateId: string): BaselineTemplate | undefined {
  return BASELINE_TEMPLATES.find(t => t.templateId === templateId)
}

/**
 * Gibt alle im Katalog verwendeten Tags als sortierte Liste zurueck.
 */
export function getAllTemplateTags(): string[] {
  const tags = new Set<string>()
  BASELINE_TEMPLATES.forEach(t => t.tags.forEach(tag => tags.add(tag)))
  return Array.from(tags).sort()
}
