import { TemplateContext } from './contextBridge'

// =============================================================================
// CATEGORY CONFIG
// =============================================================================

export const CATEGORIES: { key: string; label: string; types: string[] | null }[] = [
  { key: 'all', label: 'Alle', types: null },

  // ── Nach Nutzungskontext sortiert ──────────────────────────────────────

  // Jede Website / App braucht:
  { key: 'website', label: 'Website / App', types: ['privacy_policy', 'impressum', 'cookie_policy', 'cookie_banner', 'social_media_dsi'] },

  // Online-Shop / E-Commerce:
  { key: 'shop', label: 'Online-Shop', types: ['agb', 'widerruf', 'privacy_policy', 'impressum', 'cookie_policy', 'cookie_banner'] },

  // SaaS / Cloud-Dienst:
  { key: 'saas', label: 'SaaS / Cloud', types: ['agb', 'dpa', 'sla', 'cloud_service_agreement', 'privacy_policy', 'terms_of_use'] },

  // App / Plattform mit Nutzern:
  { key: 'platform', label: 'App / Plattform', types: ['terms_of_use', 'community_guidelines', 'privacy_policy', 'agb', 'acceptable_use', 'media_content_policy', 'copyright_policy'] },

  // Vertraege mit Geschaeftspartnern:
  { key: 'contracts', label: 'Vertraege (B2B)', types: ['dpa', 'nda', 'sla', 'cloud_service_agreement', 'data_usage_clause'] },

  // Drittlandtransfer:
  { key: 'third_country', label: 'Drittlandtransfer', types: ['transfer_impact_assessment', 'scc_companion'] },

  // ── Interne Compliance-Dokumente ──────────────────────────────────────

  // DSGVO-Kernpflichten:
  { key: 'dsgvo_core', label: 'DSGVO-Pflichten', types: ['tom_documentation', 'vvt_register', 'loeschkonzept', 'dsfa', 'pflichtenregister'] },

  // Betroffenenrechte:
  { key: 'dsr', label: 'Betroffenenrechte', types: [
    'dsr_process_art15', 'dsr_process_art16', 'dsr_process_art17',
    'dsr_process_art18', 'dsr_process_art19', 'dsr_process_art20', 'dsr_process_art21',
  ]},

  // Datenschutz-Informationen (alle DSI-Typen):
  { key: 'dsi', label: 'Datenschutzinfos', types: ['privacy_policy', 'data_protection_policy', 'applicant_dsi', 'employee_dsi', 'social_media_dsi', 'video_conference_dsi', 'informationspflichten'] },

  // Einwilligungen:
  { key: 'consent', label: 'Einwilligungen', types: ['consent_texts', 'cookie_banner', 'verpflichtungserklaerung'] },

  // ── Sicherheit & IT ───────────────────────────────────────────────────

  { key: 'security_concepts', label: 'Sicherheitskonzepte', types: ['it_security_concept', 'data_protection_concept', 'backup_recovery_concept', 'logging_concept', 'incident_response_plan', 'access_control_concept', 'risk_management_concept', 'isms_manual'] },

  { key: 'security_policies', label: 'Sicherheitsrichtlinien', types: [
    'information_security_policy', 'access_control_policy', 'password_policy', 'encryption_policy',
    'cybersecurity_policy', 'incident_response_policy', 'logging_policy', 'patch_management_policy',
    'vulnerability_management_policy', 'secrets_management_policy', 'devsecops_policy',
    'cloud_security_policy', 'change_management_policy', 'asset_management_policy', 'backup_policy',
  ]},

  // ── Organisation & HR ─────────────────────────────────────────────────

  { key: 'hr', label: 'HR & Mitarbeiter', types: ['applicant_dsi', 'employee_dsi', 'employee_security_policy', 'security_awareness_policy', 'remote_work_policy', 'offboarding_policy', 'byod_policy', 'ai_usage_policy', 'whistleblower_policy', 'verpflichtungserklaerung'] },

  { key: 'data_governance', label: 'Daten-Governance', types: ['data_protection_policy', 'data_classification_policy', 'data_retention_policy', 'data_transfer_policy', 'privacy_incident_policy'] },

  { key: 'vendor', label: 'Lieferanten / Vendor', types: ['vendor_risk_management_policy', 'third_party_security_policy', 'supplier_security_policy', 'dpa'] },

  { key: 'bcm', label: 'BCM / Notfall', types: ['business_continuity_policy', 'disaster_recovery_policy', 'crisis_management_policy', 'incident_response_plan'] },
]

// =============================================================================
// CONTEXT FORM CONFIG
// =============================================================================

export const SECTION_LABELS: Record<keyof TemplateContext, string> = {
  PROVIDER:  'Anbieter',
  CUSTOMER:  'Kunde / Gegenpartei',
  SERVICE:   'Dienst / Produkt',
  LEGAL:     'Rechtliches',
  PRIVACY:   'Datenschutz',
  SLA:       'Service Level (SLA)',
  PAYMENTS:  'Zahlungskonditionen',
  SECURITY:  'Sicherheit & Logs',
  NDA:       'Geheimhaltung (NDA)',
  CONSENT:   'Cookie / Einwilligung',
  HOSTING:   'Hosting-Provider',
  FEATURES:  'Dokument-Features & Textbausteine',
  TOM:       'TOM-Dokumentation',
  DPA:       'AVV / Auftragsverarbeitung',
}

export type FieldType = 'text' | 'email' | 'number' | 'select' | 'textarea' | 'boolean'
export interface FieldDef {
  key: string
  label: string
  type?: FieldType
  opts?: string[]
  span?: boolean
  nullable?: boolean
}

export const SECTION_FIELDS: Record<keyof TemplateContext, FieldDef[]> = {
  PROVIDER: [
    { key: 'LEGAL_NAME', label: 'Firmenname' },
    { key: 'EMAIL', label: 'Kontakt-E-Mail', type: 'email' },
    { key: 'LEGAL_FORM', label: 'Rechtsform' },
    { key: 'ADDRESS_LINE', label: 'Adresse' },
    { key: 'POSTAL_CODE', label: 'PLZ' },
    { key: 'CITY', label: 'Stadt' },
    { key: 'WEBSITE_URL', label: 'Website-URL' },
    { key: 'CEO_NAME', label: 'Geschäftsführer' },
    { key: 'REGISTER_COURT', label: 'Registergericht' },
    { key: 'REGISTER_NUMBER', label: 'HRB-Nummer' },
    { key: 'VAT_ID', label: 'USt-ID' },
    { key: 'PHONE', label: 'Telefon' },
  ],
  CUSTOMER: [
    { key: 'LEGAL_NAME', label: 'Name / Firma' },
    { key: 'EMAIL', label: 'E-Mail', type: 'email' },
    { key: 'CONTACT_NAME', label: 'Ansprechpartner' },
    { key: 'ADDRESS_LINE', label: 'Adresse' },
    { key: 'POSTAL_CODE', label: 'PLZ' },
    { key: 'CITY', label: 'Stadt' },
    { key: 'COUNTRY', label: 'Land' },
    { key: 'IS_CONSUMER', label: 'Verbraucher (B2C)', type: 'boolean' },
    { key: 'IS_BUSINESS', label: 'Unternehmer (B2B)', type: 'boolean' },
  ],
  SERVICE: [
    { key: 'NAME', label: 'Dienstname' },
    { key: 'DESCRIPTION', label: 'Beschreibung', type: 'textarea', span: true },
    { key: 'MODEL', label: 'Modell', type: 'select', opts: ['SaaS', 'PaaS', 'IaaS', 'OnPrem', 'Hybrid'] },
    { key: 'TIER', label: 'Plan / Tier' },
    { key: 'DATA_LOCATION', label: 'Datenspeicherort' },
    { key: 'EXPORT_WINDOW_DAYS', label: 'Export-Frist (Tage)', type: 'number' },
    { key: 'MIN_TERM_MONTHS', label: 'Mindestlaufzeit (Monate)', type: 'number' },
    { key: 'TERMINATION_NOTICE_DAYS', label: 'Kündigungsfrist (Tage)', type: 'number' },
  ],
  LEGAL: [
    { key: 'GOVERNING_LAW', label: 'Anwendbares Recht' },
    { key: 'JURISDICTION_CITY', label: 'Gerichtsstand (Stadt)' },
    { key: 'VERSION_DATE', label: 'Versionsstand (JJJJ-MM-TT)' },
    { key: 'EFFECTIVE_DATE', label: 'Gültig ab (JJJJ-MM-TT)' },
  ],
  PRIVACY: [
    { key: 'DPO_NAME', label: 'DSB-Name' },
    { key: 'DPO_EMAIL', label: 'DSB-E-Mail', type: 'email' },
    { key: 'CONTACT_EMAIL', label: 'Datenschutz-Kontakt', type: 'email' },
    { key: 'PRIVACY_POLICY_URL', label: 'Datenschutz-URL' },
    { key: 'COOKIE_POLICY_URL', label: 'Cookie-Policy-URL' },
    { key: 'ANALYTICS_RETENTION_MONTHS', label: 'Analytics-Aufbewahrung (Monate)', type: 'number' },
    { key: 'SUPERVISORY_AUTHORITY_NAME', label: 'Aufsichtsbehörde' },
  ],
  SLA: [
    { key: 'AVAILABILITY_PERCENT', label: 'Verfügbarkeit (%)', type: 'number' },
    { key: 'MAINTENANCE_NOTICE_HOURS', label: 'Wartungsankündigung (h)', type: 'number' },
    { key: 'SUPPORT_EMAIL', label: 'Support-E-Mail', type: 'email' },
    { key: 'SUPPORT_HOURS', label: 'Support-Zeiten' },
    { key: 'RESPONSE_CRITICAL_H', label: 'Reaktion Kritisch (h)', type: 'number' },
    { key: 'RESOLUTION_CRITICAL_H', label: 'Lösung Kritisch (h)', type: 'number' },
    { key: 'RESPONSE_HIGH_H', label: 'Reaktion Hoch (h)', type: 'number' },
    { key: 'RESOLUTION_HIGH_H', label: 'Lösung Hoch (h)', type: 'number' },
    { key: 'RESPONSE_MEDIUM_H', label: 'Reaktion Mittel (h)', type: 'number' },
    { key: 'RESOLUTION_MEDIUM_H', label: 'Lösung Mittel (h)', type: 'number' },
    { key: 'RESPONSE_LOW_H', label: 'Reaktion Niedrig (h)', type: 'number' },
  ],
  PAYMENTS: [
    { key: 'MONTHLY_FEE_EUR', label: 'Monatl. Gebühr (EUR)', type: 'number' },
    { key: 'PAYMENT_DUE_DAY', label: 'Fälligkeitstag', type: 'number' },
    { key: 'PAYMENT_METHOD', label: 'Zahlungsmethode' },
    { key: 'PAYMENT_DAYS', label: 'Zahlungsziel (Tage)', type: 'number' },
  ],
  SECURITY: [
    { key: 'INCIDENT_NOTICE_HOURS', label: 'Meldepflicht Vorfälle (h)', type: 'number' },
    { key: 'LOG_RETENTION_DAYS', label: 'Log-Aufbewahrung (Tage)', type: 'number' },
    { key: 'SECURITY_LOG_RETENTION_DAYS', label: 'Sicherheits-Log (Tage)', type: 'number' },
  ],
  NDA: [
    { key: 'PURPOSE', label: 'Zweck', type: 'textarea', span: true },
    { key: 'DURATION_YEARS', label: 'Laufzeit (Jahre)', type: 'number' },
    { key: 'PENALTY_AMOUNT_EUR', label: 'Vertragsstrafe EUR (leer = keine)', type: 'number', nullable: true },
  ],
  CONSENT: [
    { key: 'WEBSITE_NAME', label: 'Website-Name' },
    { key: 'ANALYTICS_TOOLS', label: 'Analytics-Tools (leer = kein Block)', nullable: true },
    { key: 'MARKETING_PARTNERS', label: 'Marketing-Partner (leer = kein Block)', nullable: true },
  ],
  HOSTING: [
    { key: 'PROVIDER_NAME', label: 'Hosting-Anbieter' },
    { key: 'COUNTRY', label: 'Hosting-Land' },
    { key: 'CONTRACT_TYPE', label: 'Vertragstyp (z. B. AVV nach Art. 28 DSGVO)' },
  ],
  FEATURES: [
    // ── DSI / Cookie ─────────────────────────────────────────────────────────
    { key: 'CONSENT_WITHDRAWAL_PATH', label: 'Einwilligungs-Widerrufspfad' },
    { key: 'SECURITY_MEASURES_SUMMARY', label: 'Sicherheitsmaßnahmen (kurz)' },
    { key: 'DATA_SUBJECT_REQUEST_CHANNEL', label: 'Kanal für Betroffenenanfragen' },
    { key: 'HAS_THIRD_COUNTRY', label: 'Drittlandübermittlung möglich', type: 'boolean' },
    { key: 'TRANSFER_GUARDS', label: 'Garantien (z. B. SCC)' },
    // ── Cookie/Consent ───────────────────────────────────────────────────────
    { key: 'HAS_FUNCTIONAL_COOKIES', label: 'Funktionale Cookies aktiviert', type: 'boolean' },
    { key: 'CMP_NAME', label: 'Consent-Manager-Name (optional)' },
    { key: 'CMP_LOGS_CONSENTS', label: 'Consent-Protokollierung aktiv', type: 'boolean' },
    { key: 'ANALYTICS_TOOLS_DETAIL', label: 'Analyse-Tools (Detailtext)', type: 'textarea', span: true },
    { key: 'MARKETING_TOOLS_DETAIL', label: 'Marketing-Tools (Detailtext)', type: 'textarea', span: true },
    // ── Service-Features ─────────────────────────────────────────────────────
    { key: 'HAS_ACCOUNT', label: 'Nutzerkonten vorhanden', type: 'boolean' },
    { key: 'HAS_PAYMENTS', label: 'Zahlungsabwicklung vorhanden', type: 'boolean' },
    { key: 'PAYMENT_PROVIDER_DETAIL', label: 'Zahlungsanbieter (Detailtext)', type: 'textarea', span: true },
    { key: 'HAS_SUPPORT', label: 'Support-Funktion vorhanden', type: 'boolean' },
    { key: 'SUPPORT_CHANNELS_TEXT', label: 'Support-Kanäle / Zeiten' },
    { key: 'HAS_NEWSLETTER', label: 'Newsletter vorhanden', type: 'boolean' },
    { key: 'NEWSLETTER_PROVIDER_DETAIL', label: 'Newsletter-Anbieter (Detailtext)', type: 'textarea', span: true },
    { key: 'HAS_SOCIAL_MEDIA', label: 'Social-Media-Präsenz', type: 'boolean' },
    { key: 'SOCIAL_MEDIA_DETAIL', label: 'Social-Media-Details', type: 'textarea', span: true },
    // ── AGB ──────────────────────────────────────────────────────────────────
    { key: 'HAS_PAID_PLANS', label: 'Kostenpflichtige Pläne', type: 'boolean' },
    { key: 'PRICES_TEXT', label: 'Preise (Text/Link)', type: 'textarea', span: true },
    { key: 'PAYMENT_TERMS_TEXT', label: 'Zahlungsbedingungen', type: 'textarea', span: true },
    { key: 'CONTRACT_TERM_TEXT', label: 'Laufzeit & Kündigung', type: 'textarea', span: true },
    { key: 'HAS_SLA', label: 'SLA vorhanden', type: 'boolean' },
    { key: 'SLA_URL', label: 'SLA-URL' },
    { key: 'HAS_EXPORT_POLICY', label: 'Datenexport/Löschung geregelt', type: 'boolean' },
    { key: 'EXPORT_POLICY_TEXT', label: 'Datenexport-Regelung (Text)', type: 'textarea', span: true },
    { key: 'HAS_WITHDRAWAL', label: 'Widerrufsrecht (B2C digital)', type: 'boolean' },
    { key: 'CONSUMER_WITHDRAWAL_TEXT', label: 'Widerrufsbelehrung (Text)', type: 'textarea', span: true },
    { key: 'LIMITATION_CAP_TEXT', label: 'Haftungsdeckel B2B (Text)' },
    // ── Impressum ────────────────────────────────────────────────────────────
    { key: 'HAS_REGULATED_PROFESSION', label: 'Reglementierter Beruf', type: 'boolean' },
    { key: 'REGULATED_PROFESSION_TEXT', label: 'Berufsrecht-Text', type: 'textarea', span: true },
    { key: 'HAS_EDITORIAL_RESPONSIBLE', label: 'V.i.S.d.P. (redaktionell)', type: 'boolean' },
    { key: 'EDITORIAL_RESPONSIBLE_NAME', label: 'V.i.S.d.P. Name' },
    { key: 'EDITORIAL_RESPONSIBLE_ADDRESS', label: 'V.i.S.d.P. Adresse' },
    { key: 'HAS_DISPUTE_RESOLUTION', label: 'Streitbeilegungshinweis', type: 'boolean' },
    { key: 'DISPUTE_RESOLUTION_TEXT', label: 'Streitbeilegungstext', type: 'textarea', span: true },
    // ── SaaS AGB v2 ─────────────────────────────────────────────────────────
    { key: 'B2B_ONLY', label: 'Nur B2B (keine Verbraucher)', type: 'boolean' },
    { key: 'HAS_END_USERS', label: 'Endkunden-Weitergabe (B2B2C)', type: 'boolean' },
    { key: 'HAS_MODULAR_PACKAGES', label: 'Modulare Leistungspakete', type: 'boolean' },
    { key: 'HAS_STORAGE', label: 'Speicherplatz als Leistung', type: 'boolean' },
    { key: 'HAS_STORAGE_LIMITS', label: 'Speicherplatz begrenzt', type: 'boolean' },
    { key: 'HAS_TRIAL', label: 'Kostenlose Testphase', type: 'boolean' },
    { key: 'TRIAL_DAYS', label: 'Testphase (Tage)', type: 'select', opts: ['7', '14', '30'] },
    { key: 'HAS_PRICE_ADJUSTMENT', label: 'Preisanpassungsklausel', type: 'boolean' },
    { key: 'PRICE_ADJUSTMENT_NOTICE_WEEKS', label: 'Ankündigung Preisanpassung (Wo.)', type: 'select', opts: ['4', '8', '12'] },
    { key: 'PRICE_INCREASE_THRESHOLD_PERCENT', label: 'Schwelle Sonderkündigung (%)', type: 'select', opts: ['5', '10', '15'] },
    { key: 'HAS_UPLOAD', label: 'Datei-Upload Funktion', type: 'boolean' },
    { key: 'NO_AUDIT_PROOF_STORAGE', label: 'Keine revisionssichere Speicherung', type: 'boolean' },
    { key: 'HAS_API_ACCESS', label: 'API-Zugang', type: 'boolean' },
    { key: 'HAS_MAINTENANCE_ACCESS', label: 'Fernwartungszugang (On-Premise)', type: 'boolean' },
    { key: 'HAS_MAX_DOWNTIME', label: 'Max. Ausfalldauer begrenzt', type: 'boolean' },
    { key: 'MAX_DOWNTIME_DAYS', label: 'Max. Ausfalldauer (Tage)', type: 'number' },
    { key: 'HAS_IP_INDEMNIFICATION', label: 'IP-Freistellung (Schutzrechte)', type: 'boolean' },
    { key: 'LIABILITY_MULTIPLIER', label: 'Haftungsdeckel (x Jahreslizenz)', type: 'select', opts: ['1', '2', '3'] },
    { key: 'HAS_REFERENCE_MARKETING', label: 'Referenzmarketing (Logo-Nutzung)', type: 'boolean' },
    { key: 'HAS_WHITELABEL', label: 'Whitelabel-Paket vorhanden', type: 'boolean' },
    { key: 'HAS_FORCE_MAJEURE', label: 'Force-Majeure-Klausel', type: 'boolean' },
    { key: 'HAS_COMMUNITY_GUIDELINES', label: 'Community Guidelines als Bestandteil', type: 'boolean' },
    // ── Community Guidelines (modular) ──────────────────────────────────────
    { key: 'TONE_FRIENDLY', label: 'Ton: Freundlich/Einladend', type: 'boolean' },
    { key: 'TONE_EDITORIAL', label: 'Ton: Editorial/Sachlich', type: 'boolean' },
    { key: 'TONE_FORMAL', label: 'Ton: Formal/Juristisch', type: 'boolean' },
    { key: 'HAS_MEDIA_UPLOADS', label: 'Plattform: Medien-Uploads (Bilder/Videos)', type: 'boolean' },
    { key: 'HAS_MESSAGING', label: 'Plattform: Messaging/Chat', type: 'boolean' },
    { key: 'HAS_MARKETPLACE', label: 'Plattform: Marketplace/Handel', type: 'boolean' },
    { key: 'DETAILED_ILLEGAL', label: '↳ Details: Rechtswidrige Inhalte', type: 'boolean' },
    { key: 'DETAILED_HATE_SPEECH', label: '↳ Details: Hassrede', type: 'boolean' },
    { key: 'DETAILED_FRAUD', label: '↳ Details: Betrug/Deepfakes', type: 'boolean' },
    { key: 'EXCEPTIONS_FRAUD', label: '↳ Ausnahmen: Parodie/Satire/Kunst', type: 'boolean' },
    { key: 'DETAILED_PRIVACY', label: '↳ Details: Sicherheit/Privatsphäre', type: 'boolean' },
    { key: 'DETAILED_VIOLENCE', label: '↳ Details: Gewalt (bei Medien-Uploads)', type: 'boolean' },
    { key: 'EXCEPTIONS_VIOLENCE', label: '↳ Ausnahmen: Kampfsport/Journalismus/Kunst', type: 'boolean' },
    { key: 'DETAILED_PORNOGRAPHY', label: '↳ Details: Pornografie (bei Medien-Uploads)', type: 'boolean' },
    { key: 'EXCEPTIONS_PORNOGRAPHY', label: '↳ Ausnahmen: Bodypainting/Stillen/Medizin', type: 'boolean' },
    { key: 'DETAILED_SELF_HARM', label: '↳ Details: Suizid/Selbstverletzung', type: 'boolean' },
    { key: 'EXCEPTIONS_SELF_HARM', label: '↳ Ausnahmen: Prävention/Journalismus', type: 'boolean' },
    { key: 'DETAILED_EXPLOITATION', label: '↳ Details: Ausbeutung/Missbrauch/CSAM', type: 'boolean' },
    { key: 'DETAILED_HARASSMENT', label: '↳ Details: Sexuelle Belästigung (bei Messaging)', type: 'boolean' },
    { key: 'DETAILED_DANGEROUS_PRODUCTS', label: '↳ Details: Gefährliche Produkte (bei Marketplace)', type: 'boolean' },
    { key: 'DETAILED_TERRORISM', label: '↳ Details: Terrorismus/Gefährliche Gruppen', type: 'boolean' },
    { key: 'DETAILED_DANGEROUS_ACTIVITIES', label: '↳ Details: Gefährdende Aktivitäten', type: 'boolean' },
    { key: 'GUIDELINES_URL', label: 'URL der Richtlinien' },
    // ── Medien & Content Module ─────────────────────────────────────────────
    { key: 'IS_JOURNALISTIC_MEDIA', label: 'Journalistisches Medium (MStV §§ 18-22)', type: 'boolean' },
    { key: 'EDITORIAL_EMAIL', label: 'Redaktions-E-Mail (Gegendarstellung)', type: 'email' },
    { key: 'HAS_AI_GENERATED_CONTENT', label: 'KI-generierte Inhalte (AI Act Art. 50)', type: 'boolean' },
    { key: 'DETAILED_AI_LABELING', label: '↳ Detaillierte KI-Kennzeichnungstabelle', type: 'boolean' },
    { key: 'HAS_SPONSORED_CONTENT', label: 'Bezahlte/werbliche Inhalte (§ 5a UWG)', type: 'boolean' },
    { key: 'HAS_PRESS_COUNCIL', label: 'Pressekodex-Selbstverpflichtung (Presserat)', type: 'boolean' },
    // ── Nutzungsbedingungen ─────────────────────────────────────────────────
    { key: 'HAS_UGC', label: 'User Generated Content', type: 'boolean' },
    { key: 'HAS_CONTENT_LICENSING', label: 'Content Licensing (Nutzer-zu-Nutzer)', type: 'boolean' },
    { key: 'HAS_TDM_OPTOUT', label: 'Text- und Data-Mining Opt-out', type: 'boolean' },
    { key: 'HAS_CONTENT_AUTHENTICITY', label: 'Content Authenticity (kryptogr. Herkunft)', type: 'boolean' },
    { key: 'HAS_TIPPING', label: 'Tipping/Anerkennungsfunktion', type: 'boolean' },
    { key: 'HAS_CRYPTO_PAYMENTS', label: 'Krypto-Zahlungen', type: 'boolean' },
    { key: 'HAS_INTEGRATED_WALLET', label: 'Integriertes Wallet (Non-Custodial)', type: 'boolean' },
    { key: 'HAS_IDENTITY_VERIFICATION', label: 'Identitätsprüfung erforderlich', type: 'boolean' },
    { key: 'HAS_COPYRIGHT_TAKEDOWN', label: 'Copyright Takedown-Verfahren', type: 'boolean' },
    { key: 'HAS_PAID_USER_ACCOUNTS', label: 'Kostenpflichtige Nutzeraccounts', type: 'boolean' },
    { key: 'HAS_EU_USERS', label: 'EU-weite Nutzer (Verbraucherschutz)', type: 'boolean' },
    { key: 'MFA_REQUIRED', label: 'MFA verpflichtend für Nutzer', type: 'boolean' },
    { key: 'DATA_EXPORT_BEFORE_DELETION', label: 'Datenexport vor Kontolöschung', type: 'boolean' },
    { key: 'EXPORT_BEFORE_DELETION_DAYS', label: 'Exportfrist (Tage)', type: 'select', opts: ['7', '14', '30'] },
    { key: 'MIN_AGE', label: 'Mindestalter', type: 'select', opts: ['13', '16', '18'] },
    { key: 'ALLOWS_MINORS', label: 'Minderjährige mit Eltern-Einwilligung', type: 'boolean' },
    { key: 'TIPPING_FEE_PERCENT', label: 'Tipping-Gebühr (%)', type: 'number' },
    { key: 'SUPPORTED_CURRENCIES', label: 'Unterstützte Währungen/Token' },
    // ── Widerrufsbelehrung ──────────────────────────────────────────────────
    { key: 'HAS_PHYSICAL_GOODS', label: 'Physische Waren (Rücksendung)', type: 'boolean' },
    { key: 'HAS_COMBO_PACKAGE', label: 'Kombi-Paket (Hardware + Software)', type: 'boolean' },
    { key: 'HAS_DIGITAL_CONTENT', label: 'Digitale Inhalte (§ 356 Abs. 5 BGB)', type: 'boolean' },
    { key: 'HAS_SAAS_SERVICE', label: 'SaaS-Dienstleistung (§ 356 Abs. 4 BGB)', type: 'boolean' },
    { key: 'HAS_IOT_BUNDLE', label: 'Verbundenes Produkt (Hardware + App/Cloud)', type: 'boolean' },
    { key: 'IOT_SEPARATE_CONTRACTS', label: '↳ HW und Cloud getrennt widerrufbar', type: 'boolean' },
    { key: 'RETURN_ADDRESS', label: 'Rücksendeadresse (Servicecenter)' },
    // ── Social Media DSI ────────────────────────────────────────────────────
    { key: 'HAS_FACEBOOK', label: 'Facebook & Instagram', type: 'boolean' },
    { key: 'HAS_YOUTUBE', label: 'YouTube', type: 'boolean' },
    { key: 'HAS_LINKEDIN', label: 'LinkedIn', type: 'boolean' },
    { key: 'HAS_TIKTOK', label: 'TikTok', type: 'boolean' },
    { key: 'HAS_X_TWITTER', label: 'X (Twitter)', type: 'boolean' },
    { key: 'HAS_META_PIXEL', label: 'Meta Pixel (Konversionsmessung)', type: 'boolean' },
    { key: 'HAS_RECRUITING_VIA_SOCIAL', label: 'Personalgewinnung über Social Media', type: 'boolean' },
    { key: 'SOCIAL_MEDIA_PLATFORMS_LIST', label: 'Plattform-Liste (Text)', type: 'textarea', span: true },
    // ── DSI Erweiterungen ───────────────────────────────────────────────────
    { key: 'DSI_TITLE', label: 'Titel', type: 'select', opts: ['Datenschutzerklaerung', 'Datenschutzinformation'] },
    { key: 'SERVICE_SCOPE_DESCRIPTION', label: 'Geltungsbereich (z.B. "die App xy" / "den Online-Shop")' },
    { key: 'HAS_ONLINE_SHOP', label: 'Online-Shop Funktionen', type: 'boolean' },
    { key: 'HAS_PICKUP_STATION', label: 'Abholstationen', type: 'boolean' },
    { key: 'HAS_SUBSCRIPTION', label: 'Abonnement-Modell', type: 'boolean' },
    { key: 'HAS_PRODUCT_REVIEWS', label: 'Produktbewertungen', type: 'boolean' },
    { key: 'HAS_PARENT_COMPANY', label: 'Konzernstruktur (Mutter-/Tochtergesellschaft)', type: 'boolean' },
    { key: 'HAS_LOCATION', label: 'Standortdaten erhoben', type: 'boolean' },
    { key: 'HAS_E2E_ENCRYPTION', label: 'Ende-zu-Ende-Verschlüsselung (Messaging)', type: 'boolean' },
    { key: 'DETAILED_RIGHTS', label: 'Ausführliche Rechte-Beschreibung', type: 'boolean' },
    { key: 'PROCESSOR_LIST_URL', label: 'URL Auftragsverarbeiter-Liste' },
    // ── Whistleblower ───────────────────────────────────────────────────────
    { key: 'WHISTLEBLOWER_CONTACT_NAME', label: 'Meldestelle: Ansprechperson' },
    { key: 'WHISTLEBLOWER_CONTACT_ROLE', label: 'Meldestelle: Funktion/Rolle' },
    { key: 'WHISTLEBLOWER_EMAIL', label: 'Meldestelle: E-Mail', type: 'email' },
    { key: 'WHISTLEBLOWER_PHONE', label: 'Meldestelle: Telefon' },
    { key: 'WHISTLEBLOWER_URL', label: 'Meldestelle: Online-Formular URL' },
    { key: 'HAS_ANONYMOUS_REPORTING', label: 'Anonyme Meldungen möglich', type: 'boolean' },
    { key: 'HAS_EXTERNAL_REPORTING', label: 'Externe Meldestelle (BfJ) erwähnen', type: 'boolean' },
    // ── Bewerber-DSI ────────────────────────────────────────────────────────
    { key: 'HAS_VIDEO_INTERVIEW', label: 'Video-Interviews', type: 'boolean' },
    { key: 'HAS_ASSESSMENT', label: 'Assessment-Center/Tests', type: 'boolean' },
    { key: 'HAS_TALENT_POOL', label: 'Talentpool (Einwilligung)', type: 'boolean' },
    { key: 'TALENT_POOL_MONTHS', label: 'Talentpool Aufbewahrung (Monate)', type: 'select', opts: ['6', '12', '24'] },
    { key: 'HAS_RECRUITING_AGENCY', label: 'Personalvermittler', type: 'boolean' },
    { key: 'HAS_RECRUITING_SOFTWARE', label: 'Bewerbermanagement-Software', type: 'boolean' },
    { key: 'HAS_EMPLOYEE_REFERRAL', label: 'Mitarbeiterempfehlungen', type: 'boolean' },
    // ── Mitarbeiter-DSI ─────────────────────────────────────────────────────
    { key: 'HAS_IT_USAGE_MONITORING', label: 'IT-Nutzungsüberwachung', type: 'boolean' },
    { key: 'HAS_COMPANY_VEHICLE', label: 'Dienstfahrzeuge/Fuhrpark', type: 'boolean' },
    { key: 'HAS_ACCESS_CONTROL', label: 'Zutrittskontrolle (Chipkarte)', type: 'boolean' },
    { key: 'HAS_VIDEO_SURVEILLANCE', label: 'Videoüberwachung (Arbeitsplatz)', type: 'boolean' },
    { key: 'HAS_COMPANY_PENSION', label: 'Betriebliche Altersvorsorge', type: 'boolean' },
    { key: 'HAS_EXTERNAL_HR_SOFTWARE', label: 'Externe HR-Software', type: 'boolean' },
    { key: 'HAS_WORKS_COUNCIL', label: 'Betriebsrat vorhanden', type: 'boolean' },
    { key: 'HAS_SPECIAL_CATEGORIES_EMPLOYEES', label: 'Besondere Datenkategorien (Gesundheit, Religion)', type: 'boolean' },
  ],
  // ── TOM ─────────────────────────────────────────────────────────────────
  TOM: [
    { key: 'ISB_NAME', label: 'IT-Sicherheitsbeauftragter' },
    { key: 'GF_NAME', label: 'Geschäftsführung' },
    { key: 'DOCUMENT_VERSION', label: 'Dokumentversion' },
    { key: 'NEXT_REVIEW_DATE', label: 'Nächste Prüfung (JJJJ-MM-TT)' },
    { key: 'HAS_MFA', label: 'Multi-Faktor-Authentifizierung aktiv', type: 'boolean' },
    { key: 'HAS_USB_LOCKED', label: 'USB-Schnittstellen physisch gesperrt', type: 'boolean' },
    { key: 'HAS_MOBILE_MEDIA', label: 'Mobile Datenträger im Einsatz', type: 'boolean' },
    { key: 'HAS_FOUR_EYES_DELETE', label: 'Vier-Augen-Prinzip für Löschungen', type: 'boolean' },
    { key: 'LOG_RETENTION_MONTHS', label: 'Log-Aufbewahrung (Monate)', type: 'select', opts: ['3', '6', '12', '24'] },
    { key: 'DIN_66399_LEVEL', label: 'Vernichtungsstufe (DIN 66399)', type: 'select', opts: ['1', '2', '3', '4', '5', '6', '7'] },
    { key: 'HAS_EXTERNAL_DESTRUCTION', label: 'Externer Vernichtungsdienstleister', type: 'boolean' },
    { key: 'HAS_PHYSICAL_TRANSPORT', label: 'Physischer Datenträgertransport', type: 'boolean' },
    { key: 'HAS_THIRD_COUNTRY_TRANSFER', label: 'Datenübermittlung in Drittländer', type: 'boolean' },
    { key: 'AVAILABILITY_TARGET', label: 'Verfügbarkeitsziel', type: 'select', opts: ['99.0', '99.5', '99.9', '99.99'] },
    { key: 'HAS_USV', label: 'USV vorhanden', type: 'boolean' },
    { key: 'HAS_REDUNDANCY', label: 'Redundante Systeme / Failover', type: 'boolean' },
    { key: 'HAS_GEO_REDUNDANCY', label: 'Georedundanter Standort', type: 'boolean' },
    { key: 'HAS_OWN_SERVER_ROOM', label: 'Eigener Serverraum', type: 'boolean' },
    { key: 'HAS_CLOUD_SERVICES', label: 'Cloud-Dienste im Einsatz', type: 'boolean' },
    { key: 'HAS_MULTI_TENANT', label: 'Multi-Tenant-System', type: 'boolean' },
    { key: 'SEPARATION_TYPE', label: 'Art der Mandantentrennung', type: 'select', opts: ['logisch', 'physisch', 'eigene Infrastruktur'] },
    { key: 'HAS_TEST_DATA_ANONYMIZED', label: 'Testdaten anonymisiert/synthetisch', type: 'boolean' },
  ],
  // ── DPA / AVV ─────────────────────────────────────────────────────────
  DPA: [
    { key: 'AG_NAME', label: 'Auftraggeber (Name/Firma)' },
    { key: 'AG_STRASSE', label: 'Auftraggeber Straße' },
    { key: 'AG_PLZ_ORT', label: 'Auftraggeber PLZ Ort' },
    { key: 'AN_NAME', label: 'Auftragnehmer (Name/Firma)' },
    { key: 'AN_STRASSE', label: 'Auftragnehmer Straße' },
    { key: 'AN_PLZ_ORT', label: 'Auftragnehmer PLZ Ort' },
    { key: 'VERARBEITUNGSGEGENSTAND', label: 'Gegenstand der Verarbeitung', type: 'textarea', span: true },
    { key: 'VERARBEITUNGSZWECK', label: 'Zweck der Verarbeitung', type: 'textarea', span: true },
    { key: 'VERARBEITUNGSARTEN', label: 'Art der Verarbeitung (Erheben, Speichern, …)', type: 'textarea', span: true },
    { key: 'DATENKATEGORIEN', label: 'Datenkategorien', type: 'textarea', span: true },
    { key: 'PERSONENKATEGORIEN', label: 'Betroffene Personenkategorien', type: 'textarea', span: true },
    { key: 'BREACH_NOTIFICATION_HOURS', label: 'Meldefrist Datenschutzverletzung (h)', type: 'select', opts: ['12', '24', '48'] },
    { key: 'INSTRUCTION_RETENTION_YEARS', label: 'Aufbewahrung Weisungen (Jahre)', type: 'select', opts: ['3', '5', '10'] },
    { key: 'SUB_PROCESSOR_NOTICE_WEEKS', label: 'Ankündigung Sub-AV (Wochen)', type: 'select', opts: ['2', '4', '6'] },
    { key: 'SUB_PROCESSOR_OBJECTION_WEEKS', label: 'Widerspruchsfrist Sub-AV (Wochen)', type: 'select', opts: ['2', '4'] },
    { key: 'DATA_EXPORT_FORMAT', label: 'Datenformat bei Rückgabe', type: 'select', opts: ['CSV/JSON', 'CSV', 'JSON', 'XML', 'nach Vereinbarung'] },
    { key: 'RETURN_CHOICE_WEEKS', label: 'Frist Rückgabe-Wahl (Wochen)', type: 'select', opts: ['2', '4', '8'] },
    { key: 'DELETION_DAYS', label: 'Löschfrist nach Vertragsende (Tage)', type: 'select', opts: ['30', '60', '90'] },
    { key: 'AN_DSB_NAME', label: 'DSB Auftragnehmer Name' },
    { key: 'AN_DSB_EMAIL', label: 'DSB Auftragnehmer E-Mail', type: 'email' },
    { key: 'VERTRAGSDATUM', label: 'Vertragsdatum (JJJJ-MM-TT)' },
    { key: 'GERICHTSSTAND', label: 'Gerichtsstand' },
    { key: 'HAS_LIABILITY_PROTECTION', label: 'Haftungsschutz bei Weisung (§ 4.1a)', type: 'boolean' },
    { key: 'HAS_SUPPORT_COST_CLAUSE', label: 'Kostenregelung Unterstützung (§ 7.4)', type: 'boolean' },
    { key: 'HAS_SUB_PROCESSOR_SILENCE_APPROVAL', label: 'Zustimmungsfiktion bei Sub-AV (§ 8.2a)', type: 'boolean' },
    { key: 'HAS_SUB_PROCESSOR_TERMINATION_RIGHT', label: 'Kündigungsrecht bei Sub-AV-Widerspruch (§ 8.3)', type: 'boolean' },
    { key: 'HAS_REACTIVATION_PERIOD', label: 'Reaktivierungszeitraum (§ 10.1)', type: 'boolean' },
    { key: 'REACTIVATION_MONTHS', label: 'Reaktivierung (Monate)', type: 'select', opts: ['1', '3', '6'] },
    { key: 'HAS_RETURN_COST_CLAUSE', label: 'Kosten für Datenrückgabe (§ 10.5)', type: 'boolean' },
    { key: 'HAS_GERICHTSSTAND_CLAUSE', label: 'Gerichtsstandklausel (§ 11.1)', type: 'boolean' },
    { key: 'HAS_UNILATERAL_CHANGE_RIGHT', label: '⚠️ Einseitiges Änderungsrecht AN (§ 11.6)', type: 'boolean' },
  ],
}

// Available module definitions (id → display label)
export const MODULE_LABELS: Record<string, string> = {
  CLOUD_EXPORT_DELETE_DE: 'Datenexport & Löschrecht',
  B2C_WITHDRAWAL_DE: 'Widerrufsrecht (B2C)',
}
