/**
 * Compliance Scope Engine - Hard Trigger Types
 *
 * Definiert Typen für regelbasierte Mindest-Compliance-Level-Erzwingung.
 */

import type { ComplianceDepthLevel } from './core-levels'

/**
 * Bedingungsoperatoren für Hard Trigger
 */
export type HardTriggerOperator =
  | 'EQUALS'          // Exakte Übereinstimmung
  | 'CONTAINS'        // Enthält (für Arrays/Strings)
  | 'IN'              // Ist in Liste enthalten
  | 'GREATER_THAN'    // Größer als (numerisch)
  | 'NOT_EQUALS';     // Ungleich

/**
 * Hard Trigger Regel - erzwingt Mindest-Compliance-Level
 */
export interface HardTriggerRule {
  /** Eindeutige ID der Regel */
  id: string;
  /** Kategorie der Regel */
  category: string;
  /** Frage-ID, die geprüft wird */
  questionId: string;
  /** Bedingungsoperator */
  condition: HardTriggerOperator;
  /** Wert, der geprüft wird */
  conditionValue: unknown;
  /** Minimal erforderliches Level */
  minimumLevel: ComplianceDepthLevel;
  /** DSFA erforderlich? */
  requiresDSFA: boolean;
  /** Pflichtdokumente bei Trigger */
  mandatoryDocuments: string[];
  /** Rechtsgrundlage */
  legalReference: string;
  /** Detaillierte Beschreibung */
  description: string;
  /** Kombiniert mit Art. 9 Daten? */
  combineWithArt9?: boolean;
  /** Kombiniert mit Minderjährigen-Daten? */
  combineWithMinors?: boolean;
  /** Kombiniert mit KI-Nutzung? */
  combineWithAI?: boolean;
  /** Kombiniert mit Mitarbeiterüberwachung? */
  combineWithEmployeeMonitoring?: boolean;
  /** Kombiniert mit automatisierter Entscheidungsfindung? */
  combineWithADM?: boolean;
  /** Regel feuert NICHT wenn diese Bedingung zutrifft */
  excludeWhen?: { questionId: string; value: string | string[] };
  /** Regel feuert NUR wenn diese Bedingung zutrifft */
  requireWhen?: { questionId: string; value: string | string[] };
  /** Kombiniert mit Maschinenbau-Profil? Boolean oder Objekt mit Feldbedingung */
  combineWithMachineBuilder?: boolean | { field: string; value?: unknown; includes?: string };
  /** Risikogewicht (0-1) */
  riskWeight?: number;
}

/**
 * Getriggerter Hard Trigger mit Kontext
 */
export interface TriggeredHardTrigger {
  /** Regel-ID */
  ruleId: string;
  /** Kategorie */
  category: string;
  /** Beschreibung */
  description: string;
  /** Rechtsgrundlage */
  legalReference?: string;
  /** Mindest-Level */
  minimumLevel: ComplianceDepthLevel;
  /** DSFA erforderlich? */
  requiresDSFA: boolean;
  /** Pflichtdokumente */
  mandatoryDocuments: string[];
  /** Original-Regel (optional) */
  rule?: HardTriggerRule;
  /** Matching-Wert */
  matchedValue?: unknown;
  /** Erklaerung */
  explanation?: string;
}
