/**
 * Compliance Scope Engine - Core Level Types
 *
 * Definiert die grundlegenden Compliance-Tiefenstufen und Score-Typen.
 */

/**
 * Compliance-Tiefenstufen
 * - L1: Lean Startup - Minimalansatz für kleine Organisationen
 * - L2: KMU Standard - Standard-Compliance für mittelständische Unternehmen
 * - L3: Erweitert - Erweiterte Compliance für größere/risikoreichere Organisationen
 * - L4: Zertifizierungsbereit - Vollständige Compliance für Zertifizierungen
 */
export type ComplianceDepthLevel = 'L1' | 'L2' | 'L3' | 'L4';

/**
 * Compliance-Scores zur Bestimmung der optimalen Tiefe
 * Alle Werte zwischen 0-100
 */
export interface ComplianceScores {
  /** Risiko-Score (0-100): Höhere Werte = höheres Risiko */
  risk_score: number;
  /** Komplexitäts-Score (0-100): Höhere Werte = komplexere Verarbeitung */
  complexity_score: number;
  /** Assurance-Bedarf (0-100): Höhere Werte = höherer Nachweis-/Zertifizierungsbedarf */
  assurance_need: number;
  /** Zusammengesetzter Score (0-100): Gewichtete Kombination aller Scores */
  composite_score: number;
}

/**
 * Gibt das höhere von zwei Depth Levels zurück.
 */
export function maxDepthLevel(
  a: ComplianceDepthLevel,
  b: ComplianceDepthLevel
): ComplianceDepthLevel {
  const levels: ComplianceDepthLevel[] = ['L1', 'L2', 'L3', 'L4'];
  const indexA = levels.indexOf(a);
  const indexB = levels.indexOf(b);
  return levels[Math.max(indexA, indexB)];
}

/**
 * Konvertiert Depth Level zu numerischem Wert (1-4).
 */
export function getDepthLevelNumeric(level: ComplianceDepthLevel): number {
  const map: Record<ComplianceDepthLevel, number> = {
    L1: 1,
    L2: 2,
    L3: 3,
    L4: 4,
  };
  return map[level];
}

/**
 * Konvertiert numerischen Wert (1-4) zu Depth Level.
 */
export function depthLevelFromNumeric(n: number): ComplianceDepthLevel {
  const map: Record<number, ComplianceDepthLevel> = {
    1: 'L1',
    2: 'L2',
    3: 'L3',
    4: 'L4',
  };
  return map[Math.max(1, Math.min(4, Math.round(n)))] || 'L1';
}
