/**
 * VVT Baseline-Katalog
 *
 * Vordefinierte Verarbeitungstaetigkeiten als Templates.
 * Werden vom Profiling-Fragebogen (Generator) genutzt, um
 * auf Basis der Antworten VVT-Eintraege vorzubefuellen.
 */

import type { VVTActivity, BusinessFunction } from './vvt-types'

export interface BaselineTemplate {
  templateId: string
  businessFunction: BusinessFunction
  name: string
  description: string
  purposes: string[]
  legalBases: { type: string; description?: string; reference?: string }[]
  dataSubjectCategories: string[]
  personalDataCategories: string[]
  recipientCategories: { type: string; name: string; description?: string }[]
  retentionPeriod: { duration?: number; durationUnit?: string; description: string; legalBasis?: string; deletionProcedure?: string }
  tomDescription: string
  structuredToms: {
    accessControl: string[]
    confidentiality: string[]
    integrity: string[]
    availability: string[]
    separation: string[]
  }
  typicalSystems: string[]
  protectionLevel: 'LOW' | 'MEDIUM' | 'HIGH'
  dpiaRequired: boolean
  tags: string[]
}

// =============================================================================
// BASELINE TEMPLATES
// =============================================================================

export const VVT_BASELINE_CATALOG: BaselineTemplate[] = [
  // ==================== HR ====================
  {
    templateId: 'hr-mitarbeiterverwaltung',
    businessFunction: 'hr',
    name: 'Mitarbeiterverwaltung',
    description: 'Verwaltung von Stammdaten, Vertraegen und Personalakten der Beschaeftigten',
    purposes: ['Durchfuehrung des Beschaeftigungsverhaeltnisses', 'Personalverwaltung und -planung'],
    legalBases: [
      { type: 'CONTRACT', description: 'Arbeitsvertrag', reference: 'Art. 6 Abs. 1 lit. b DSGVO' },
      { type: 'LEGAL_OBLIGATION', description: 'Arbeitsrechtliche Pflichten', reference: '§ 26 BDSG' },
    ],
    dataSubjectCategories: ['EMPLOYEES'],
    personalDataCategories: ['NAME', 'CONTACT', 'ADDRESS', 'DOB', 'SOCIAL_SECURITY', 'TAX_ID', 'BANK_ACCOUNT', 'EMPLOYMENT_DATA'],
    recipientCategories: [
      { type: 'INTERNAL', name: 'Personalabteilung' },
      { type: 'AUTHORITY', name: 'Finanzamt' },
      { type: 'AUTHORITY', name: 'Sozialversicherungstraeger' },
    ],
    retentionPeriod: { duration: 10, durationUnit: 'YEARS', description: '10 Jahre nach Ende des Beschaeftigungsverhaeltnisses', legalBasis: 'HGB § 257, AO § 147', deletionProcedure: 'Sichere Loeschung nach Ablauf' },
    tomDescription: 'Zugriffskontrolle auf Personalakten, Verschluesselung, Protokollierung',
    structuredToms: {
      accessControl: ['RBAC', 'Need-to-know-Prinzip', 'Personalakten nur fuer HR'],
      confidentiality: ['Verschluesselung personenbezogener Daten', 'Vertraulichkeitsvereinbarungen'],
      integrity: ['Aenderungsprotokollierung', 'Vier-Augen-Prinzip bei Gehaltsaenderungen'],
      availability: ['Regelmaessige Backups', 'Redundante Speicherung'],
      separation: ['Trennung Personal-/Gehaltsdaten'],
    },
    typicalSystems: ['HR-Software', 'Gehaltsabrechnung', 'Dokumentenmanagement'],
    protectionLevel: 'HIGH',
    dpiaRequired: false,
    tags: ['hr', 'mitarbeiter', 'personal'],
  },
  {
    templateId: 'hr-gehaltsabrechnung',
    businessFunction: 'hr',
    name: 'Gehaltsabrechnung',
    description: 'Berechnung und Auszahlung von Gehaeltern, Sozialabgaben und Steuern',
    purposes: ['Lohn- und Gehaltsabrechnung', 'Erfuellung steuer- und sozialversicherungsrechtlicher Pflichten'],
    legalBases: [
      { type: 'CONTRACT', description: 'Arbeitsvertrag', reference: 'Art. 6 Abs. 1 lit. b DSGVO' },
      { type: 'LEGAL_OBLIGATION', description: 'Steuer-/Sozialversicherungsrecht', reference: 'Art. 6 Abs. 1 lit. c DSGVO' },
    ],
    dataSubjectCategories: ['EMPLOYEES'],
    personalDataCategories: ['NAME', 'ADDRESS', 'SOCIAL_SECURITY', 'TAX_ID', 'BANK_ACCOUNT', 'SALARY_DATA'],
    recipientCategories: [
      { type: 'PROCESSOR', name: 'Lohnbuero / Steuerberater' },
      { type: 'AUTHORITY', name: 'Finanzamt' },
      { type: 'AUTHORITY', name: 'Krankenkassen' },
    ],
    retentionPeriod: { duration: 10, durationUnit: 'YEARS', description: '10 Jahre (steuerrechtlich)', legalBasis: 'AO § 147 Abs. 1 Nr. 1', deletionProcedure: 'Automatische Loeschung nach Fristablauf' },
    tomDescription: 'Strenge Zugriffskontrolle, Verschluesselung, Trennung von Stamm- und Gehaltsdaten',
    structuredToms: {
      accessControl: ['Nur Lohnbuchhaltung/Steuerberater', 'MFA'],
      confidentiality: ['Verschluesselung at-rest und in-transit', 'Vertraulichkeitsklausel'],
      integrity: ['Revisionssichere Ablage', 'Pruefprotokoll'],
      availability: ['Monatliche Backups', 'Jahresabschluss-Archiv'],
      separation: ['Gehaltsdaten getrennt von allgemeinen Personaldaten'],
    },
    typicalSystems: ['DATEV', 'Lohnabrechnungssoftware'],
    protectionLevel: 'HIGH',
    dpiaRequired: false,
    tags: ['hr', 'gehalt', 'lohn', 'steuer'],
  },
  {
    templateId: 'hr-bewerbermanagement',
    businessFunction: 'hr',
    name: 'Bewerbermanagement',
    description: 'Entgegennahme, Verwaltung und Bewertung von Bewerbungen',
    purposes: ['Bearbeitung eingehender Bewerbungen', 'Bewerberauswahl'],
    legalBases: [
      { type: 'CONTRACT', description: 'Vorvertragliche Massnahmen', reference: 'Art. 6 Abs. 1 lit. b DSGVO' },
      { type: 'LEGITIMATE_INTEREST', description: 'Bewerberauswahl', reference: '§ 26 Abs. 1 BDSG' },
    ],
    dataSubjectCategories: ['APPLICANTS'],
    personalDataCategories: ['NAME', 'CONTACT', 'ADDRESS', 'EDUCATION_DATA', 'EMPLOYMENT_DATA', 'PHOTO_VIDEO'],
    recipientCategories: [
      { type: 'INTERNAL', name: 'Personalabteilung' },
      { type: 'INTERNAL', name: 'Fachabteilung' },
    ],
    retentionPeriod: { duration: 6, durationUnit: 'MONTHS', description: '6 Monate nach Absage (AGG-Frist)', legalBasis: 'AGG § 15 Abs. 4', deletionProcedure: 'Automatische Loeschung 6 Monate nach Absage' },
    tomDescription: 'Zugriffsbeschraenkung auf beteiligte Entscheidungstraeger, verschluesselte Uebertragung',
    structuredToms: {
      accessControl: ['Nur HR + Fachabteilung', 'Zeitlich begrenzter Zugriff'],
      confidentiality: ['TLS fuer Bewerbungsportale', 'Verschluesselter E-Mail-Empfang'],
      integrity: ['Unveraenderbare Bewerbungseingaenge'],
      availability: ['Regelmaessige Backups'],
      separation: ['Getrennte Bewerberdatenbank'],
    },
    typicalSystems: ['Bewerbermanagementsystem', 'E-Mail'],
    protectionLevel: 'MEDIUM',
    dpiaRequired: false,
    tags: ['hr', 'bewerbung', 'recruiting'],
  },
  {
    templateId: 'hr-zeiterfassung',
    businessFunction: 'hr',
    name: 'Zeiterfassung',
    description: 'Erfassung von Arbeitszeiten, Urlaub und Fehlzeiten',
    purposes: ['Arbeitszeiterfassung gemaess ArbZG', 'Urlaubsverwaltung'],
    legalBases: [
      { type: 'LEGAL_OBLIGATION', description: 'Arbeitszeitgesetz', reference: 'Art. 6 Abs. 1 lit. c DSGVO, ArbZG § 16 Abs. 2' },
    ],
    dataSubjectCategories: ['EMPLOYEES'],
    personalDataCategories: ['NAME', 'EMPLOYMENT_DATA'],
    recipientCategories: [
      { type: 'INTERNAL', name: 'Personalabteilung' },
      { type: 'INTERNAL', name: 'Vorgesetzte' },
    ],
    retentionPeriod: { duration: 2, durationUnit: 'YEARS', description: '2 Jahre (ArbZG)', legalBasis: 'ArbZG § 16 Abs. 2', deletionProcedure: 'Automatische Loeschung' },
    tomDescription: 'Zugriffskontrolle nach Abteilung, Protokollierung von Aenderungen',
    structuredToms: {
      accessControl: ['Vorgesetzte sehen nur eigene Abteilung', 'HR sieht alle'],
      confidentiality: ['Krankmeldungen nur HR'],
      integrity: ['Aenderungshistorie'],
      availability: ['Taegliches Backup'],
      separation: ['Trennung Zeitdaten / Gehaltsdaten'],
    },
    typicalSystems: ['Zeiterfassungssystem', 'HR-Software'],
    protectionLevel: 'MEDIUM',
    dpiaRequired: false,
    tags: ['hr', 'zeiterfassung', 'arbeitszeit'],
  },

  // ==================== FINANCE ====================
  {
    templateId: 'finance-buchhaltung',
    businessFunction: 'finance',
    name: 'Buchhaltung & Rechnungswesen',
    description: 'Finanzbuchhaltung, Rechnungsstellung und Zahlungsverkehr',
    purposes: ['Finanzbuchhaltung', 'Rechnungsstellung', 'Erfuellung handels-/steuerrechtlicher Aufbewahrungspflichten'],
    legalBases: [
      { type: 'LEGAL_OBLIGATION', description: 'HGB, AO', reference: 'Art. 6 Abs. 1 lit. c DSGVO' },
      { type: 'CONTRACT', description: 'Vertragserfuellung', reference: 'Art. 6 Abs. 1 lit. b DSGVO' },
    ],
    dataSubjectCategories: ['CUSTOMERS', 'SUPPLIERS', 'BUSINESS_PARTNERS'],
    personalDataCategories: ['NAME', 'CONTACT', 'ADDRESS', 'BANK_ACCOUNT', 'PAYMENT_DATA', 'CONTRACT_DATA', 'TAX_ID'],
    recipientCategories: [
      { type: 'PROCESSOR', name: 'Steuerberater / Wirtschaftspruefer' },
      { type: 'AUTHORITY', name: 'Finanzamt' },
    ],
    retentionPeriod: { duration: 10, durationUnit: 'YEARS', description: '10 Jahre (HGB) / 6 Jahre (Geschaeftsbriefe)', legalBasis: 'HGB § 257, AO § 147', deletionProcedure: 'Loeschung nach Ablauf der jeweiligen Frist' },
    tomDescription: 'Zugriffskontrolle nach Vier-Augen-Prinzip, revisionssichere Archivierung',
    structuredToms: {
      accessControl: ['Vier-Augen-Prinzip', 'RBAC nach Buchhaltungsrollen'],
      confidentiality: ['Verschluesselung Finanzdaten'],
      integrity: ['Revisionssichere Archivierung (GoBD)', 'Aenderungsprotokoll'],
      availability: ['Redundante Speicherung', 'Jaehrliche Backups'],
      separation: ['Trennung Debitoren/Kreditoren'],
    },
    typicalSystems: ['DATEV', 'ERP-System', 'Buchhaltungssoftware'],
    protectionLevel: 'MEDIUM',
    dpiaRequired: false,
    tags: ['finance', 'buchhaltung', 'rechnungswesen'],
  },
  {
    templateId: 'finance-zahlungsverkehr',
    businessFunction: 'finance',
    name: 'Zahlungsverkehr',
    description: 'Abwicklung von Zahlungen, SEPA-Lastschriften und Ueberweisungen',
    purposes: ['Zahlungsabwicklung', 'Mahnwesen'],
    legalBases: [
      { type: 'CONTRACT', description: 'Vertragserfuellung', reference: 'Art. 6 Abs. 1 lit. b DSGVO' },
    ],
    dataSubjectCategories: ['CUSTOMERS', 'SUPPLIERS'],
    personalDataCategories: ['NAME', 'BANK_ACCOUNT', 'PAYMENT_DATA'],
    recipientCategories: [
      { type: 'PROCESSOR', name: 'Zahlungsdienstleister' },
      { type: 'PROCESSOR', name: 'Kreditinstitut' },
    ],
    retentionPeriod: { duration: 10, durationUnit: 'YEARS', description: '10 Jahre', legalBasis: 'HGB § 257', deletionProcedure: 'Automatische Loeschung' },
    tomDescription: 'PCI-DSS-konforme Verarbeitung, Verschluesselung, Zugriffsbeschraenkung',
    structuredToms: {
      accessControl: ['Streng limitierter Zugriff', 'MFA'],
      confidentiality: ['TLS 1.3', 'Tokenisierung von Zahlungsdaten'],
      integrity: ['Transaktionsprotokoll'],
      availability: ['Hochverfuegbarer Zahlungsservice'],
      separation: ['Zahlungsdaten getrennt von CRM'],
    },
    typicalSystems: ['Banking-Software', 'Payment Gateway'],
    protectionLevel: 'HIGH',
    dpiaRequired: false,
    tags: ['finance', 'zahlung', 'payment'],
  },

  // ==================== SALES / CRM ====================
  {
    templateId: 'sales-kundenverwaltung',
    businessFunction: 'sales_crm',
    name: 'Kundenverwaltung (CRM)',
    description: 'Verwaltung von Kundenbeziehungen, Kontakten und Vertriebsaktivitaeten',
    purposes: ['Kundenbetreuung', 'Vertragserfuellung', 'Vertriebssteuerung'],
    legalBases: [
      { type: 'CONTRACT', description: 'Kundenvertrag', reference: 'Art. 6 Abs. 1 lit. b DSGVO' },
      { type: 'LEGITIMATE_INTEREST', description: 'Kundenbindung', reference: 'Art. 6 Abs. 1 lit. f DSGVO' },
    ],
    dataSubjectCategories: ['CUSTOMERS', 'PROSPECTIVE_CUSTOMERS', 'BUSINESS_PARTNERS'],
    personalDataCategories: ['NAME', 'CONTACT', 'ADDRESS', 'CONTRACT_DATA', 'COMMUNICATION_DATA'],
    recipientCategories: [
      { type: 'INTERNAL', name: 'Vertrieb' },
      { type: 'INTERNAL', name: 'Kundenservice' },
    ],
    retentionPeriod: { duration: 3, durationUnit: 'YEARS', description: '3 Jahre nach letzter Interaktion (Verjaeherung)', legalBasis: 'BGB § 195', deletionProcedure: 'Loeschung nach Inaktivitaetsfrist' },
    tomDescription: 'Zugriffskontrolle nach Kundengruppen, Verschluesselung, regemaessige Datenpflege',
    structuredToms: {
      accessControl: ['RBAC nach Vertriebsgebiet', 'Kundendaten-Owner'],
      confidentiality: ['Verschluesselung in CRM', 'VPN fuer Fernzugriff'],
      integrity: ['Aenderungshistorie im CRM'],
      availability: ['Cloud-CRM mit SLA 99.9%'],
      separation: ['Mandantentrennung'],
    },
    typicalSystems: ['CRM-System', 'E-Mail', 'Telefon'],
    protectionLevel: 'MEDIUM',
    dpiaRequired: false,
    tags: ['sales', 'crm', 'kunden', 'vertrieb'],
  },
  {
    templateId: 'sales-vertriebssteuerung',
    businessFunction: 'sales_crm',
    name: 'Vertriebssteuerung',
    description: 'Analyse von Vertriebskennzahlen und Pipeline-Management',
    purposes: ['Vertriebsoptimierung', 'Umsatzplanung'],
    legalBases: [
      { type: 'LEGITIMATE_INTEREST', description: 'Unternehmenssteuerung', reference: 'Art. 6 Abs. 1 lit. f DSGVO' },
    ],
    dataSubjectCategories: ['CUSTOMERS', 'PROSPECTIVE_CUSTOMERS'],
    personalDataCategories: ['NAME', 'CONTRACT_DATA', 'COMMUNICATION_DATA'],
    recipientCategories: [
      { type: 'INTERNAL', name: 'Vertriebsleitung' },
      { type: 'INTERNAL', name: 'Geschaeftsfuehrung' },
    ],
    retentionPeriod: { duration: 3, durationUnit: 'YEARS', description: '3 Jahre', legalBasis: 'Berechtigtes Interesse', deletionProcedure: 'Anonymisierung nach Ablauf' },
    tomDescription: 'Aggregierte Auswertungen wo moeglich, Zugriffsbeschraenkung auf Fuehrungsebene',
    structuredToms: {
      accessControl: ['Nur Management'],
      confidentiality: ['Aggregierte Reports bevorzugt'],
      integrity: ['Nachvollziehbare Berechnungen'],
      availability: ['Dashboard-Verfuegbarkeit'],
      separation: ['Reporting getrennt von Operativdaten'],
    },
    typicalSystems: ['CRM-System', 'BI-Tool'],
    protectionLevel: 'LOW',
    dpiaRequired: false,
    tags: ['sales', 'vertrieb', 'reporting'],
  },

  // ==================== MARKETING ====================
  {
    templateId: 'marketing-newsletter',
    businessFunction: 'marketing',
    name: 'Newsletter-Marketing',
    description: 'Versand von Marketing-E-Mails und Newslettern an Abonnenten',
    purposes: ['Direktmarketing', 'Kundenbindung', 'Informationsversand'],
    legalBases: [
      { type: 'CONSENT', description: 'Einwilligung zum Newsletter-Empfang', reference: 'Art. 6 Abs. 1 lit. a DSGVO, § 7 Abs. 2 UWG' },
    ],
    dataSubjectCategories: ['NEWSLETTER_SUBSCRIBERS', 'CUSTOMERS'],
    personalDataCategories: ['NAME', 'CONTACT', 'USAGE_DATA'],
    recipientCategories: [
      { type: 'PROCESSOR', name: 'E-Mail-Dienstleister' },
      { type: 'INTERNAL', name: 'Marketing-Abteilung' },
    ],
    retentionPeriod: { description: 'Bis zum Widerruf der Einwilligung', deletionProcedure: 'Sofortige Loeschung bei Abmeldung' },
    tomDescription: 'Double-Opt-In, Abmeldelink in jeder E-Mail, Einwilligungsprotokollierung',
    structuredToms: {
      accessControl: ['Nur Marketing-Team'],
      confidentiality: ['TLS-Versand', 'Keine Weitergabe an Dritte'],
      integrity: ['Einwilligungsnachweis (Timestamp, IP, Version)'],
      availability: ['Redundanter E-Mail-Service'],
      separation: ['Newsletter-Liste getrennt von CRM'],
    },
    typicalSystems: ['Newsletter-Tool', 'E-Mail-Marketing-Plattform'],
    protectionLevel: 'LOW',
    dpiaRequired: false,
    tags: ['marketing', 'newsletter', 'email'],
  },
  {
    templateId: 'marketing-website-analytics',
    businessFunction: 'marketing',
    name: 'Website-Analytics',
    description: 'Analyse des Nutzerverhaltens auf der Website mittels Tracking-Tools',
    purposes: ['Website-Optimierung', 'Reichweitenmessung'],
    legalBases: [
      { type: 'CONSENT', description: 'Cookie-Einwilligung', reference: 'Art. 6 Abs. 1 lit. a DSGVO, § 25 TDDDG' },
    ],
    dataSubjectCategories: ['WEBSITE_USERS'],
    personalDataCategories: ['IP_ADDRESS', 'DEVICE_ID', 'USAGE_DATA', 'LOCATION_DATA'],
    recipientCategories: [
      { type: 'PROCESSOR', name: 'Analytics-Anbieter' },
      { type: 'INTERNAL', name: 'Marketing' },
    ],
    retentionPeriod: { duration: 14, durationUnit: 'MONTHS', description: '14 Monate', deletionProcedure: 'Automatische Loeschung/Anonymisierung' },
    tomDescription: 'IP-Anonymisierung, Cookie-Consent-Management, Opt-Out-Moeglichkeit',
    structuredToms: {
      accessControl: ['Nur Webanalyse-Team'],
      confidentiality: ['IP-Anonymisierung', 'Pseudonymisierung'],
      integrity: ['Datenqualitaetspruefung'],
      availability: ['CDN-basiertes Tracking'],
      separation: ['Analytics getrennt von personenbezogenen Profilen'],
    },
    typicalSystems: ['Matomo', 'Plausible', 'Google Analytics'],
    protectionLevel: 'MEDIUM',
    dpiaRequired: false,
    tags: ['marketing', 'analytics', 'website', 'tracking'],
  },
  {
    templateId: 'marketing-social-media',
    businessFunction: 'marketing',
    name: 'Social-Media-Marketing',
    description: 'Betrieb von Social-Media-Kanaelen und Interaktion mit Nutzern',
    purposes: ['Oeffentlichkeitsarbeit', 'Kundeninteraktion'],
    legalBases: [
      { type: 'LEGITIMATE_INTEREST', description: 'Marketing', reference: 'Art. 6 Abs. 1 lit. f DSGVO' },
    ],
    dataSubjectCategories: ['WEBSITE_USERS', 'CUSTOMERS'],
    personalDataCategories: ['NAME', 'CONTACT', 'USAGE_DATA', 'COMMUNICATION_DATA'],
    recipientCategories: [
      { type: 'CONTROLLER', name: 'Social-Media-Plattform (gemeinsame Verantwortlichkeit)' },
    ],
    retentionPeriod: { description: 'Abhaengig von Plattform-Einstellungen', deletionProcedure: 'Regelmaessige Pruefung und Bereinigung' },
    tomDescription: 'Datenschutzeinstellungen der Plattform, gemeinsame Verantwortlichkeit gemaess Art. 26',
    structuredToms: {
      accessControl: ['Nur Social-Media-Manager', 'Passwort-Manager'],
      confidentiality: ['Plattform-Datenschutzeinstellungen'],
      integrity: ['Redaktionsplan'],
      availability: ['Multi-Kanal-Management'],
      separation: ['Geschaeftlich/Privat getrennt'],
    },
    typicalSystems: ['Social-Media-Plattformen', 'Social-Media-Management-Tool'],
    protectionLevel: 'LOW',
    dpiaRequired: false,
    tags: ['marketing', 'social-media'],
  },

  // ==================== SUPPORT ====================
  {
    templateId: 'support-ticketsystem',
    businessFunction: 'support',
    name: 'Kundenservice / Ticketsystem',
    description: 'Bearbeitung von Kundenanfragen und Support-Tickets',
    purposes: ['Kundenservice', 'Reklamationsbearbeitung', 'Vertragserfuellung'],
    legalBases: [
      { type: 'CONTRACT', description: 'Kundenvertrag', reference: 'Art. 6 Abs. 1 lit. b DSGVO' },
    ],
    dataSubjectCategories: ['CUSTOMERS', 'APP_USERS'],
    personalDataCategories: ['NAME', 'CONTACT', 'CONTRACT_DATA', 'COMMUNICATION_DATA'],
    recipientCategories: [
      { type: 'INTERNAL', name: 'Support-Team' },
      { type: 'PROCESSOR', name: 'Helpdesk-Software-Anbieter' },
    ],
    retentionPeriod: { duration: 3, durationUnit: 'YEARS', description: '3 Jahre nach Ticketschliessung', legalBasis: 'BGB § 195', deletionProcedure: 'Automatische Loeschung geschlossener Tickets' },
    tomDescription: 'Zugriffskontrolle nach Ticket-Owner, Verschluesselung, Audit-Trail',
    structuredToms: {
      accessControl: ['Ticket-basierte Zugriffskontrolle', 'Agent-Rollen'],
      confidentiality: ['TLS', 'Verschluesselung'],
      integrity: ['Ticket-Historie unveraenderbar'],
      availability: ['Hochverfuegbarer Helpdesk'],
      separation: ['Mandantentrennung'],
    },
    typicalSystems: ['Helpdesk-Software', 'E-Mail', 'Chat'],
    protectionLevel: 'MEDIUM',
    dpiaRequired: false,
    tags: ['support', 'kundenservice', 'tickets'],
  },

  // ==================== IT OPERATIONS ====================
  {
    templateId: 'it-systemadministration',
    businessFunction: 'it_operations',
    name: 'Systemadministration',
    description: 'Verwaltung von IT-Systemen, Benutzerkonten und Zugriffsrechten',
    purposes: ['IT-Betrieb', 'Benutzerverwaltung', 'Sicherheitsueberwachung'],
    legalBases: [
      { type: 'LEGITIMATE_INTEREST', description: 'IT-Sicherheit', reference: 'Art. 6 Abs. 1 lit. f DSGVO' },
      { type: 'CONTRACT', description: 'Bereitstellung IT-Dienste', reference: 'Art. 6 Abs. 1 lit. b DSGVO' },
    ],
    dataSubjectCategories: ['EMPLOYEES', 'APP_USERS'],
    personalDataCategories: ['NAME', 'CONTACT', 'LOGIN_DATA', 'IP_ADDRESS', 'DEVICE_ID'],
    recipientCategories: [
      { type: 'INTERNAL', name: 'IT-Abteilung' },
      { type: 'PROCESSOR', name: 'IT-Dienstleister' },
    ],
    retentionPeriod: { duration: 1, durationUnit: 'YEARS', description: '1 Jahr nach Kontodeaktivierung', deletionProcedure: 'Automatische Loeschung deaktivierter Konten' },
    tomDescription: 'PAM, MFA, Protokollierung, regelmaessige Rechtereviews',
    structuredToms: {
      accessControl: ['PAM (Privileged Access Management)', 'MFA', 'Regelmaessige Rechtereviews'],
      confidentiality: ['Verschluesselung', 'Passwort-Policies'],
      integrity: ['Change Management', 'Konfigurationsmanagement'],
      availability: ['Redundanz', 'Monitoring', 'Alerting'],
      separation: ['Prod/Dev/Staging getrennt', 'Admin-Netze isoliert'],
    },
    typicalSystems: ['Active Directory / IAM', 'Monitoring', 'ITSM'],
    protectionLevel: 'MEDIUM',
    dpiaRequired: false,
    tags: ['it', 'admin', 'benutzerverwaltung'],
  },
  {
    templateId: 'it-backup',
    businessFunction: 'it_operations',
    name: 'Backup & Recovery',
    description: 'Sicherung und Wiederherstellung von Daten und Systemen',
    purposes: ['Datensicherung', 'Disaster Recovery', 'Geschaeftskontinuitaet'],
    legalBases: [
      { type: 'LEGITIMATE_INTEREST', description: 'Datensicherheit', reference: 'Art. 6 Abs. 1 lit. f DSGVO, Art. 32 DSGVO' },
    ],
    dataSubjectCategories: ['EMPLOYEES', 'CUSTOMERS'],
    personalDataCategories: ['NAME', 'CONTACT', 'CONTRACT_DATA'],
    recipientCategories: [
      { type: 'PROCESSOR', name: 'Backup-Dienstleister' },
      { type: 'INTERNAL', name: 'IT-Abteilung' },
    ],
    retentionPeriod: { duration: 90, durationUnit: 'DAYS', description: '90 Tage Aufbewahrung der Backups', deletionProcedure: 'Automatische Rotation und Loeschung' },
    tomDescription: 'Verschluesselung, Zugriffskontrolle, regelmaessige Wiederherstellungstests',
    structuredToms: {
      accessControl: ['Nur Backup-Admins', 'Separater Encryption Key'],
      confidentiality: ['AES-256-Verschluesselung', 'Verschluesselter Transport'],
      integrity: ['Checksummen-Pruefung', 'Regelmaessige Restore-Tests'],
      availability: ['3-2-1-Backup-Regel', 'Georedundanz'],
      separation: ['Backup-Netzwerk isoliert'],
    },
    typicalSystems: ['Backup-Software', 'Cloud-Storage'],
    protectionLevel: 'MEDIUM',
    dpiaRequired: false,
    tags: ['it', 'backup', 'recovery'],
  },
  {
    templateId: 'it-logging',
    businessFunction: 'it_operations',
    name: 'Protokollierung & Logging',
    description: 'Erfassung von System- und Sicherheitslogs zur Fehlerbehebung und Angriffserkennung',
    purposes: ['IT-Sicherheit', 'Fehlerbehebung', 'Angriffserkennung'],
    legalBases: [
      { type: 'LEGITIMATE_INTEREST', description: 'IT-Sicherheit und Betrieb', reference: 'Art. 6 Abs. 1 lit. f DSGVO' },
    ],
    dataSubjectCategories: ['EMPLOYEES', 'APP_USERS', 'WEBSITE_USERS'],
    personalDataCategories: ['IP_ADDRESS', 'LOGIN_DATA', 'USAGE_DATA', 'DEVICE_ID'],
    recipientCategories: [
      { type: 'INTERNAL', name: 'IT-Sicherheit' },
      { type: 'PROCESSOR', name: 'SIEM-Anbieter' },
    ],
    retentionPeriod: { duration: 90, durationUnit: 'DAYS', description: '90 Tage (Standard) / 1 Jahr (Security-Logs)', deletionProcedure: 'Automatische Rotation' },
    tomDescription: 'SIEM, Integritaetsschutz der Logs, Zugriffskontrolle, Pseudonymisierung',
    structuredToms: {
      accessControl: ['Nur Security-Team', 'Read-Only fuer Auditoren'],
      confidentiality: ['Pseudonymisierung wo moeglich'],
      integrity: ['WORM-Storage fuer Security-Logs', 'Hashketten'],
      availability: ['Redundante Log-Speicherung'],
      separation: ['Zentrale Log-Infrastruktur getrennt'],
    },
    typicalSystems: ['SIEM', 'ELK Stack', 'Syslog'],
    protectionLevel: 'MEDIUM',
    dpiaRequired: false,
    tags: ['it', 'logging', 'sicherheit'],
  },
  {
    templateId: 'it-iam',
    businessFunction: 'it_operations',
    name: 'Identity & Access Management',
    description: 'Verwaltung von Identitaeten, Authentifizierung und Autorisierung',
    purposes: ['Zugriffskontrolle', 'Identitaetsverwaltung', 'Compliance'],
    legalBases: [
      { type: 'LEGITIMATE_INTEREST', description: 'IT-Sicherheit', reference: 'Art. 6 Abs. 1 lit. f DSGVO' },
      { type: 'CONTRACT', description: 'Bereitstellung IT-Dienste', reference: 'Art. 6 Abs. 1 lit. b DSGVO' },
    ],
    dataSubjectCategories: ['EMPLOYEES', 'APP_USERS'],
    personalDataCategories: ['NAME', 'CONTACT', 'LOGIN_DATA'],
    recipientCategories: [
      { type: 'INTERNAL', name: 'IT-Abteilung' },
      { type: 'PROCESSOR', name: 'IAM-Anbieter' },
    ],
    retentionPeriod: { duration: 6, durationUnit: 'MONTHS', description: '6 Monate nach Kontodeaktivierung', deletionProcedure: 'Automatische Deprovisionierung' },
    tomDescription: 'MFA, SSO, regelmaessige Access Reviews, Least-Privilege-Prinzip',
    structuredToms: {
      accessControl: ['MFA', 'SSO', 'Least Privilege', 'Regelmaessige Reviews'],
      confidentiality: ['Passwort-Hashing (bcrypt)', 'Token-basierte Auth'],
      integrity: ['Audit-Trail aller Aenderungen'],
      availability: ['Hochverfuegbarer IdP'],
      separation: ['Identitaeten pro Mandant'],
    },
    typicalSystems: ['IAM-System', 'SSO Provider', 'MFA'],
    protectionLevel: 'HIGH',
    dpiaRequired: false,
    tags: ['it', 'iam', 'zugriffskontrolle'],
  },

  // ==================== OTHER ====================
  {
    templateId: 'other-videokonferenz',
    businessFunction: 'other',
    name: 'Videokonferenzen',
    description: 'Durchfuehrung von Video-Meetings und Online-Besprechungen',
    purposes: ['Interne Kommunikation', 'Kundeninteraktion', 'Remote-Arbeit'],
    legalBases: [
      { type: 'LEGITIMATE_INTEREST', description: 'Geschaeftliche Kommunikation', reference: 'Art. 6 Abs. 1 lit. f DSGVO' },
      { type: 'CONTRACT', description: 'Arbeitsvertrag (bei Mitarbeitern)', reference: 'Art. 6 Abs. 1 lit. b DSGVO' },
    ],
    dataSubjectCategories: ['EMPLOYEES', 'CUSTOMERS', 'BUSINESS_PARTNERS'],
    personalDataCategories: ['NAME', 'CONTACT', 'PHOTO_VIDEO', 'IP_ADDRESS', 'COMMUNICATION_DATA'],
    recipientCategories: [
      { type: 'PROCESSOR', name: 'Videokonferenz-Anbieter' },
    ],
    retentionPeriod: { description: 'Keine dauerhafte Speicherung von Meetings (sofern nicht aufgezeichnet)', deletionProcedure: 'Aufzeichnungen nach Verwendungszweck loeschen' },
    tomDescription: 'Ende-zu-Ende-Verschluesselung, Warteraum, Passwortschutz, Aufnahme nur mit Einwilligung',
    structuredToms: {
      accessControl: ['Meeting-Passwort', 'Warteraum', 'Host-Kontrolle'],
      confidentiality: ['TLS / E2E-Verschluesselung'],
      integrity: ['Teilnehmerliste'],
      availability: ['Redundante Infrastruktur'],
      separation: ['Separate Meeting-Raeume'],
    },
    typicalSystems: ['Jitsi', 'Zoom', 'Teams', 'Google Meet'],
    protectionLevel: 'LOW',
    dpiaRequired: false,
    tags: ['kommunikation', 'video', 'meeting'],
  },
  {
    templateId: 'other-besuchermanagement',
    businessFunction: 'other',
    name: 'Besuchermanagement',
    description: 'Erfassung und Verwaltung von Besuchern am Firmenstandort',
    purposes: ['Zutrittskontrolle', 'Sicherheit', 'Nachverfolgung'],
    legalBases: [
      { type: 'LEGITIMATE_INTEREST', description: 'Gebaeudesicherheit', reference: 'Art. 6 Abs. 1 lit. f DSGVO' },
    ],
    dataSubjectCategories: ['VISITORS'],
    personalDataCategories: ['NAME', 'CONTACT', 'PHOTO_VIDEO'],
    recipientCategories: [
      { type: 'INTERNAL', name: 'Empfang / Sicherheit' },
    ],
    retentionPeriod: { duration: 30, durationUnit: 'DAYS', description: '30 Tage nach Besuch', deletionProcedure: 'Automatische Loeschung' },
    tomDescription: 'Besucherausweise, Begleitpflicht, zeitlich begrenzter Zugang',
    structuredToms: {
      accessControl: ['Besucherausweise', 'Begleitpflicht'],
      confidentiality: ['Besucherliste nicht oeffentlich einsehbar'],
      integrity: ['Besuchsprotokoll'],
      availability: ['Papier-Backup fuer Besucherliste'],
      separation: ['Besucherbereich getrennt'],
    },
    typicalSystems: ['Besuchermanagementsystem', 'Zutrittskontrollsystem'],
    protectionLevel: 'LOW',
    dpiaRequired: false,
    tags: ['besucher', 'zutritt', 'empfang'],
  },
]

// =============================================================================
// HELPER: Convert template to VVTActivity
// =============================================================================

export function templateToActivity(template: BaselineTemplate, vvtId: string): Omit<import('./vvt-types').VVTActivity, 'id'> & { id: string } {
  const now = new Date().toISOString()
  return {
    id: crypto.randomUUID(),
    vvtId,
    name: template.name,
    description: template.description,
    purposes: template.purposes,
    legalBases: template.legalBases,
    dataSubjectCategories: template.dataSubjectCategories,
    personalDataCategories: template.personalDataCategories,
    recipientCategories: template.recipientCategories,
    thirdCountryTransfers: [],
    retentionPeriod: template.retentionPeriod,
    tomDescription: template.tomDescription,
    businessFunction: template.businessFunction,
    systems: template.typicalSystems.map((s, i) => ({ systemId: `sys-${i}`, name: s })),
    deploymentModel: 'cloud',
    dataSources: [{ type: 'DATA_SUBJECT', description: 'Direkt von der betroffenen Person' }],
    dataFlows: [],
    protectionLevel: template.protectionLevel,
    dpiaRequired: template.dpiaRequired,
    structuredToms: template.structuredToms,
    status: 'DRAFT',
    responsible: '',
    owner: '',
    createdAt: now,
    updatedAt: now,
  }
}

// =============================================================================
// HELPER: Get templates by business function
// =============================================================================

export function getTemplatesByFunction(fn: BusinessFunction): BaselineTemplate[] {
  return VVT_BASELINE_CATALOG.filter(t => t.businessFunction === fn)
}

export function getTemplateById(templateId: string): BaselineTemplate | undefined {
  return VVT_BASELINE_CATALOG.find(t => t.templateId === templateId)
}
