/**
 * Compliance Scope Engine - Decision & Output Types
 *
 * Definiert die finale Scope-Entscheidung und zugehörige Ausgabetypen.
 */

import type { ComplianceDepthLevel, ComplianceScores } from './core-levels'
import type { TriggeredHardTrigger } from './hard-triggers'
import type { RequiredDocument, ScopeDocumentType } from './documents'

/**
 * Die finale Scope-Entscheidung mit allen Details
 */
export interface ScopeDecision {
  /** Eindeutige ID dieser Entscheidung */
  id: string;
  /** Bestimmtes Compliance-Level */
  determinedLevel: ComplianceDepthLevel;
  /** Berechnete Scores */
  scores: ComplianceScores;
  /** Getriggerte Hard Trigger */
  triggeredHardTriggers: TriggeredHardTrigger[];
  /** Erforderliche Dokumente mit Details */
  requiredDocuments: RequiredDocument[];
  /** Identifizierte Risiko-Flags */
  riskFlags: RiskFlag[];
  /** Identifizierte Lücken */
  gaps: ScopeGap[];
  /** Empfohlene nächste Schritte */
  nextActions: NextAction[];
  /** Begründung der Entscheidung */
  reasoning: ScopeReasoning[];
  /** Zeitstempel Erstellung */
  createdAt: string;
  /** Zeitstempel letzte Änderung */
  updatedAt: string;
  /** Zeitstempel der Auswertung */
  evaluatedAt?: string;
}

/**
 * Risiko-Flag
 */
export interface RiskFlag {
  /** Schweregrad */
  severity: string;
  /** Kategorie */
  category: string;
  /** Beschreibung */
  message: string;
  /** Rechtsgrundlage */
  legalReference?: string;
  /** Empfehlung zur Behebung */
  recommendation: string;
}

/**
 * Identifizierte Lücke in der Compliance
 */
export interface ScopeGap {
  /** Gap-Typ */
  gapType: string;
  /** Schweregrad */
  severity: string;
  /** Beschreibung */
  description: string;
  /** Erforderlich für Level */
  requiredFor: ComplianceDepthLevel;
  /** Aktueller Zustand */
  currentState: string;
  /** Zielzustand */
  targetState: string;
  /** Aufwand in Stunden */
  effort: number;
  /** Priorität */
  priority: string;
}

/**
 * Nächster empfohlener Schritt
 */
export interface NextAction {
  /** Aktionstyp */
  actionType: 'create_document' | 'establish_process' | 'implement_technical' | 'organizational_change';
  /** Titel */
  title: string;
  /** Beschreibung */
  description: string;
  /** Priorität */
  priority: string;
  /** Geschätzter Aufwand in Stunden */
  estimatedEffort: number;
  /** Dokumenttyp (optional) */
  documentType?: ScopeDocumentType;
  /** Link zum SDK-Schritt */
  sdkStepUrl?: string;
  /** Blocker */
  blockers: string[];
}

/**
 * Begründungsschritt für die Entscheidung
 */
export interface ScopeReasoning {
  /** Schritt-Nummer/ID */
  step: string;
  /** Kurzbeschreibung */
  description: string;
  /** Faktoren */
  factors: string[];
  /** Auswirkung */
  impact: string;
}

/**
 * Erstellt eine leere ScopeDecision mit Default-Werten.
 */
export function createEmptyScopeDecision(): ScopeDecision {
  return {
    id: `decision_${Date.now()}`,
    determinedLevel: 'L1',
    scores: {
      risk_score: 0,
      complexity_score: 0,
      assurance_need: 0,
      composite_score: 0,
    },
    triggeredHardTriggers: [],
    requiredDocuments: [],
    riskFlags: [],
    gaps: [],
    nextActions: [],
    reasoning: [],
    createdAt: new Date().toISOString(),
    updatedAt: new Date().toISOString(),
  };
}

// ============================================================================
// Regulation Assessment Types (from Go AI SDK /assess-from-scope)
// ============================================================================

/** Eine anwendbare Regulierung (aus Go SDK ApplicableRegulation). */
export interface ApplicableRegulation {
  id: string
  name: string
  classification: string
  reason: string
  obligation_count: number
  control_count: number
}

/** Einzelne Pflicht aus dem Go SDK. */
export interface RegulationObligation {
  id: string
  regulation_id: string
  title: string
  description: string
  category: string
  responsible: string
  priority: string
  legal_basis?: Array<{ article: string; name: string }>
  how_to_implement?: string
  breakpilot_feature?: string
}

/** Ergebnis der Regulierungs-Bewertung vom Go AI SDK. */
export interface RegulationAssessmentResult {
  applicable_regulations: ApplicableRegulation[]
  obligations: RegulationObligation[]
  executive_summary: {
    total_regulations: number
    total_obligations: number
    critical_obligations: number
    compliance_score: number
    key_risks: string[]
    recommended_actions: string[]
  }
}

/** Aufsichtsbehoerden-Ergebnis. */
export interface SupervisoryAuthorityInfo {
  domain: string
  authority: {
    name: string
    abbreviation: string
    url: string
  }
}
