import type {
  ScopeQuestionBlock,
} from './compliance-scope-types'
import { DEPARTMENT_DATA_CATEGORIES } from './vvt-profiling'
import {
  BLOCK_1_ORGANISATION,
  BLOCK_2_DATA,
  BLOCK_3_PROCESSING,
  BLOCK_4_TECH,
  BLOCK_5_PROCESSES,
  BLOCK_6_PRODUCT,
  BLOCK_7_AI_SYSTEMS,
} from './compliance-scope-profiling-blocks'

/**
 * Block 8: Verarbeitungstätigkeiten (portiert aus Company Profile Step 6)
 */
const BLOCK_8_VVT: ScopeQuestionBlock = {
  id: 'vvt',
  title: 'Verarbeitungstätigkeiten',
  description: 'Übersicht der Datenverarbeitungen nach Art. 30 DSGVO',
  order: 8,
  questions: [
    {
      id: 'vvt_departments',
      type: 'multi',
      question: 'In welchen Abteilungen werden personenbezogene Daten verarbeitet?',
      helpText: 'Wählen Sie alle Abteilungen, in denen Verarbeitungstätigkeiten stattfinden',
      required: true,
      options: [
        { value: 'personal', label: 'Personal / HR' },
        { value: 'finanzen', label: 'Finanzen / Buchhaltung' },
        { value: 'vertrieb', label: 'Vertrieb / Sales' },
        { value: 'marketing', label: 'Marketing' },
        { value: 'it', label: 'IT / Administration' },
        { value: 'recht', label: 'Recht / Compliance' },
        { value: 'kundenservice', label: 'Kundenservice / Support' },
        { value: 'produktion', label: 'Produktion / Fertigung' },
        { value: 'logistik', label: 'Logistik / Versand' },
        { value: 'einkauf', label: 'Einkauf / Beschaffung' },
        { value: 'facility', label: 'Facility Management' },
      ],
      scoreWeights: { risk: 10, complexity: 10, assurance: 8 },
    },
    {
      id: 'vvt_data_categories',
      type: 'multi',
      question: 'Welche Datenkategorien werden verarbeitet?',
      helpText: 'Wählen Sie alle zutreffenden Kategorien personenbezogener Daten',
      required: true,
      options: [
        { value: 'stammdaten', label: 'Stammdaten (Name, Geburtsdatum)' },
        { value: 'kontaktdaten', label: 'Kontaktdaten (E-Mail, Telefon, Adresse)' },
        { value: 'vertragsdaten', label: 'Vertragsdaten' },
        { value: 'zahlungsdaten', label: 'Zahlungs-/Bankdaten' },
        { value: 'beschaeftigtendaten', label: 'Beschäftigtendaten (Gehalt, Arbeitszeiten)' },
        { value: 'kommunikation', label: 'Kommunikationsdaten (E-Mail, Chat)' },
        { value: 'nutzungsdaten', label: 'Nutzungs-/Logdaten (IP, Klicks)' },
        { value: 'standortdaten', label: 'Standortdaten' },
        { value: 'bilddaten', label: 'Bild-/Videodaten' },
        { value: 'bewerberdaten', label: 'Bewerberdaten' },
      ],
      scoreWeights: { risk: 8, complexity: 7, assurance: 7 },
    },
    {
      id: 'vvt_special_categories',
      type: 'boolean',
      question: 'Verarbeiten Sie besondere Kategorien (Art. 9 DSGVO) in Ihren Tätigkeiten?',
      helpText: 'Gesundheit, Biometrie, Religion, Gewerkschaft — über die bereits in Block 2 erfassten hinaus',
      required: true,
      scoreWeights: { risk: 10, complexity: 5, assurance: 8 },
    },
    {
      id: 'vvt_has_vvt',
      type: 'boolean',
      question: 'Haben Sie bereits ein Verarbeitungsverzeichnis (VVT)?',
      helpText: 'Dokumentation aller Verarbeitungstätigkeiten nach Art. 30 DSGVO',
      required: true,
      scoreWeights: { risk: -5, complexity: 3, assurance: 8 },
    },
    {
      id: 'vvt_external_processors',
      type: 'boolean',
      question: 'Setzen Sie externe Dienstleister als Auftragsverarbeiter ein?',
      helpText: 'Lohnbüro, Hosting-Provider, Cloud-Dienste, externe IT etc.',
      required: true,
      scoreWeights: { risk: 7, complexity: 6, assurance: 7 },
    },
  ],
}

/**
 * Block 9: Datenkategorien pro Abteilung
 * Generiert Fragen dynamisch aus DEPARTMENT_DATA_CATEGORIES
 */
const BLOCK_9_DATENKATEGORIEN: ScopeQuestionBlock = {
  id: 'datenkategorien_detail',
  title: 'Datenkategorien pro Abteilung',
  description: 'Detaillierte Erfassung der Datenkategorien je Abteilung — basierend auf Ihrer Abteilungswahl in Block 8',
  order: 9,
  questions: [
    {
      id: 'dk_dept_hr',
      type: 'multi',
      question: 'Welche Datenkategorien verarbeitet Ihre Personalabteilung?',
      helpText: 'Waehlen Sie alle zutreffenden Datenkategorien fuer den HR-Bereich',
      required: false,
      options: DEPARTMENT_DATA_CATEGORIES.dept_hr.categories.map(c => ({
        value: c.id,
        label: `${c.label}${c.isArt9 ? ' (Art. 9)' : ''}`,
      })),
      scoreWeights: { risk: 6, complexity: 4, assurance: 5 },
      mapsToVVTQuestion: 'dept_hr_categories',
    },
    {
      id: 'dk_dept_recruiting',
      type: 'multi',
      question: 'Welche Datenkategorien verarbeitet Ihr Recruiting?',
      helpText: 'Waehlen Sie alle zutreffenden Datenkategorien fuer das Bewerbermanagement',
      required: false,
      options: DEPARTMENT_DATA_CATEGORIES.dept_recruiting.categories.map(c => ({
        value: c.id,
        label: `${c.label}${c.isArt9 ? ' (Art. 9)' : ''}`,
      })),
      scoreWeights: { risk: 5, complexity: 3, assurance: 4 },
      mapsToVVTQuestion: 'dept_recruiting_categories',
    },
    {
      id: 'dk_dept_finance',
      type: 'multi',
      question: 'Welche Datenkategorien verarbeitet Ihre Finanzabteilung?',
      helpText: 'Waehlen Sie alle zutreffenden Datenkategorien fuer Finanzen & Buchhaltung',
      required: false,
      options: DEPARTMENT_DATA_CATEGORIES.dept_finance.categories.map(c => ({
        value: c.id,
        label: `${c.label}${c.isArt9 ? ' (Art. 9)' : ''}`,
      })),
      scoreWeights: { risk: 6, complexity: 4, assurance: 5 },
      mapsToVVTQuestion: 'dept_finance_categories',
    },
    {
      id: 'dk_dept_sales',
      type: 'multi',
      question: 'Welche Datenkategorien verarbeitet Ihr Vertrieb?',
      helpText: 'Waehlen Sie alle zutreffenden Datenkategorien fuer Vertrieb & CRM',
      required: false,
      options: DEPARTMENT_DATA_CATEGORIES.dept_sales.categories.map(c => ({
        value: c.id,
        label: `${c.label}${c.isArt9 ? ' (Art. 9)' : ''}`,
      })),
      scoreWeights: { risk: 5, complexity: 4, assurance: 4 },
      mapsToVVTQuestion: 'dept_sales_categories',
    },
    {
      id: 'dk_dept_marketing',
      type: 'multi',
      question: 'Welche Datenkategorien verarbeitet Ihr Marketing?',
      helpText: 'Waehlen Sie alle zutreffenden Datenkategorien fuer Marketing',
      required: false,
      options: DEPARTMENT_DATA_CATEGORIES.dept_marketing.categories.map(c => ({
        value: c.id,
        label: `${c.label}${c.isArt9 ? ' (Art. 9)' : ''}`,
      })),
      scoreWeights: { risk: 6, complexity: 5, assurance: 5 },
      mapsToVVTQuestion: 'dept_marketing_categories',
    },
    {
      id: 'dk_dept_support',
      type: 'multi',
      question: 'Welche Datenkategorien verarbeitet Ihr Kundenservice?',
      helpText: 'Waehlen Sie alle zutreffenden Datenkategorien fuer Support',
      required: false,
      options: DEPARTMENT_DATA_CATEGORIES.dept_support.categories.map(c => ({
        value: c.id,
        label: `${c.label}${c.isArt9 ? ' (Art. 9)' : ''}`,
      })),
      scoreWeights: { risk: 5, complexity: 3, assurance: 4 },
      mapsToVVTQuestion: 'dept_support_categories',
    },
    {
      id: 'dk_dept_it',
      type: 'multi',
      question: 'Welche Datenkategorien verarbeitet Ihre IT-Abteilung?',
      helpText: 'Waehlen Sie alle zutreffenden Datenkategorien fuer IT / Administration',
      required: false,
      options: DEPARTMENT_DATA_CATEGORIES.dept_it.categories.map(c => ({
        value: c.id,
        label: `${c.label}${c.isArt9 ? ' (Art. 9)' : ''}`,
      })),
      scoreWeights: { risk: 7, complexity: 5, assurance: 6 },
      mapsToVVTQuestion: 'dept_it_categories',
    },
    {
      id: 'dk_dept_recht',
      type: 'multi',
      question: 'Welche Datenkategorien verarbeitet Ihre Rechtsabteilung?',
      helpText: 'Waehlen Sie alle zutreffenden Datenkategorien fuer Recht / Compliance',
      required: false,
      options: DEPARTMENT_DATA_CATEGORIES.dept_recht.categories.map(c => ({
        value: c.id,
        label: `${c.label}${c.isArt9 ? ' (Art. 9)' : ''}`,
      })),
      scoreWeights: { risk: 6, complexity: 4, assurance: 6 },
      mapsToVVTQuestion: 'dept_recht_categories',
    },
    {
      id: 'dk_dept_produktion',
      type: 'multi',
      question: 'Welche Datenkategorien verarbeitet Ihre Produktion?',
      helpText: 'Waehlen Sie alle zutreffenden Datenkategorien fuer Produktion / Fertigung',
      required: false,
      options: DEPARTMENT_DATA_CATEGORIES.dept_produktion.categories.map(c => ({
        value: c.id,
        label: `${c.label}${c.isArt9 ? ' (Art. 9)' : ''}`,
      })),
      scoreWeights: { risk: 6, complexity: 4, assurance: 5 },
      mapsToVVTQuestion: 'dept_produktion_categories',
    },
    {
      id: 'dk_dept_logistik',
      type: 'multi',
      question: 'Welche Datenkategorien verarbeitet Ihre Logistik?',
      helpText: 'Waehlen Sie alle zutreffenden Datenkategorien fuer Logistik / Versand',
      required: false,
      options: DEPARTMENT_DATA_CATEGORIES.dept_logistik.categories.map(c => ({
        value: c.id,
        label: `${c.label}${c.isArt9 ? ' (Art. 9)' : ''}`,
      })),
      scoreWeights: { risk: 5, complexity: 3, assurance: 4 },
      mapsToVVTQuestion: 'dept_logistik_categories',
    },
    {
      id: 'dk_dept_einkauf',
      type: 'multi',
      question: 'Welche Datenkategorien verarbeitet Ihr Einkauf?',
      helpText: 'Waehlen Sie alle zutreffenden Datenkategorien fuer Einkauf / Beschaffung',
      required: false,
      options: DEPARTMENT_DATA_CATEGORIES.dept_einkauf.categories.map(c => ({
        value: c.id,
        label: `${c.label}${c.isArt9 ? ' (Art. 9)' : ''}`,
      })),
      scoreWeights: { risk: 4, complexity: 3, assurance: 4 },
      mapsToVVTQuestion: 'dept_einkauf_categories',
    },
    {
      id: 'dk_dept_facility',
      type: 'multi',
      question: 'Welche Datenkategorien verarbeitet Ihr Facility Management?',
      helpText: 'Waehlen Sie alle zutreffenden Datenkategorien fuer Facility Management',
      required: false,
      options: DEPARTMENT_DATA_CATEGORIES.dept_facility.categories.map(c => ({
        value: c.id,
        label: `${c.label}${c.isArt9 ? ' (Art. 9)' : ''}`,
      })),
      scoreWeights: { risk: 5, complexity: 3, assurance: 4 },
      mapsToVVTQuestion: 'dept_facility_categories',
    },
  ],
}

/**
 * All question blocks in order
 */
export const SCOPE_QUESTION_BLOCKS: ScopeQuestionBlock[] = [
  BLOCK_1_ORGANISATION,
  BLOCK_2_DATA,
  BLOCK_3_PROCESSING,
  BLOCK_4_TECH,
  BLOCK_5_PROCESSES,
  BLOCK_6_PRODUCT,
  BLOCK_7_AI_SYSTEMS,
  BLOCK_8_VVT,
  BLOCK_9_DATENKATEGORIEN,
]
