/**
 * Compliance Scope Engine - Question & Profiling Types
 *
 * Definiert Typen für das Scope-Profiling-Fragebogensystem.
 */

/**
 * IDs der Fragenblöcke für das Scope-Profiling
 */
export type ScopeQuestionBlockId =
  | 'organisation'        // Organisation & Reife
  | 'data'                // Daten & Betroffene
  | 'processing'          // Verarbeitung & Zweck
  | 'tech'                // Technik & Hosting
  | 'processes'           // Rechte & Prozesse
  | 'product'             // Produktkontext
  | 'ai_systems'          // KI-Systeme (aus Profil portiert)
  | 'vvt'                 // Verarbeitungstaetigkeiten (aus Profil portiert)
  | 'datenkategorien_detail';  // Datenkategorien pro Abteilung (Block 9)

/**
 * Eine einzelne Frage im Scope-Profiling
 */
export interface ScopeProfilingQuestion {
  /** Eindeutige ID der Frage */
  id: string;
  /** Fragetext */
  question: string;
  /** Optional: Hilfetext/Erklärung */
  helpText?: string;
  /** Antworttyp */
  type: 'single' | 'multi' | 'boolean' | 'number' | 'text';
  /** Antwortoptionen (für single/multi) */
  options?: Array<{ value: string; label: string }>;
  /** Ist die Frage erforderlich? */
  required: boolean;
  /** Gewichtung für Score-Berechnung */
  scoreWeights?: {
    risk?: number;      // Einfluss auf Risiko-Score
    complexity?: number; // Einfluss auf Komplexitäts-Score
    assurance?: number;  // Einfluss auf Assurance-Bedarf
  };
  /** Mapping zu Firmenprofil-Feldern */
  mapsToCompanyProfile?: string;
  /** Mapping zu VVT-Fragen */
  mapsToVVTQuestion?: string;
  /** Mapping zu LF-Fragen */
  mapsToLFQuestion?: string;
  /** Mapping zu TOM-Profil */
  mapsToTOMProfile?: string;
}

/**
 * Antwort auf eine Profiling-Frage
 */
export interface ScopeProfilingAnswer {
  /** ID der beantworteten Frage */
  questionId: string;
  /** Antwortwert (Typ abhängig von Fragentyp) */
  value: string | string[] | boolean | number;
  /** Optionaler Block-Kontext der Antwort */
  blockId?: string;
}

/**
 * Ein Block von zusammengehörigen Fragen
 */
export interface ScopeQuestionBlock {
  /** Block-ID */
  id: ScopeQuestionBlockId;
  /** Block-Titel */
  title: string;
  /** Block-Beschreibung */
  description: string;
  /** Reihenfolge des Blocks */
  order: number;
  /** Fragen in diesem Block */
  questions: ScopeProfilingQuestion[];
}
