// Loop 10 (Teil 2): Status-, Richtungs- und Einordnungslogik der
// QAF-Vergleichstabellen — aus `qaf-comparison-detail.tsx` herausgezogen.
//
// Warum das ein eigenes Modul ist: die Komponente trägt `tdd-guard:skip`
// („presentational"). Diese Funktionen sind aber keine Darstellung, sondern
// Regeln — welche Richtung ein Delta hat, ob eine Veränderung günstig oder
// ungünstig ist, ob ein Befund als „Blockiert" oder „Nicht prüfbar" gilt. In
// der Komponente waren sie damit faktisch ungetestet, obwohl ein Vorzeichen-
// fehler in `diffStatusClass` jede Kostensenkung rot einfärben würde.
//
// Reine Funktionen ohne React. Sie liefern Tailwind-Klassennamen, gehören
// deshalb bewusst NICHT in den portablen `lib/qaf-differences`-Kern
// (check:qaf-core-portability) — das ist Präsentationsschicht, nur eben eine
// mit fachlichen Regeln darin.
//
// Loop 10 Modul 4 (View-Spec-Adoption): die klassenfreie Richtungs- und
// Label-Semantik (diffDirection/diffStatusLabel/DIFF_STATUS_LABEL/
// STRUCTURAL_STATUS) lebt seitdem kanonisch im Builder
// (lib/qaf-differences/internal/manufacturing-run.ts) und wird hier unter
// den etablierten Namen re-exportiert — gleiches Muster wie
// plausibilityBadge → plausibilityKindClass (Modul 3). Hier verbleiben nur
// die Tailwind-Klassen-Seiten.

import { HIGHER_IS_BETTER_FIELDS } from "@/lib/qaf/comparison"
import type { PlausibilityBadgeKind } from "@/lib/qaf-differences/internal/appendix-run"
import type { DiffDirection } from "@/lib/qaf-differences/internal/manufacturing-run"

export {
  diffDirection,
  diffStatusLabel,
  DIFF_STATUS_LABEL,
  STRUCTURAL_STATUS,
} from "@/lib/qaf-differences/internal/manufacturing-run"
export type {
  DiffDirection,
  DiffDeltaFields,
} from "@/lib/qaf-differences/internal/manufacturing-run"

/**
 * Farbklasse einer Diff-Zelle.
 *
 * Der fachliche Kern steckt in den letzten drei Zeilen: gefärbt wird nach
 * **Günstigkeit**, nicht nach roher Richtung. Bei Feldern aus
 * `HIGHER_IS_BETTER_FIELDS` (KAR-833, z. B. Teile pro Zyklus) ist ein Anstieg
 * gut und muss grün sein. Ein Vorzeichenfehler hier färbt jede Kostensenkung
 * rot — deshalb ist genau das durchgetestet.
 */
export function diffStatusClass(
  status: string | null,
  dir: DiffDirection,
  field?: string
): string {
  if (status === "neu") return "bg-primary-tint text-primary-dark"
  if (status === "entfallen") return "bg-status-grey text-foreground"
  if (status === "blockiert")
    return "bg-status-red-strong text-foreground font-semibold"
  // KAR-900/P2.1: both formula-override statuses read as a distinct visual
  // warning — formel_zu_konstante is the critical manipulation pattern
  // (kritisch styling), formel_geaendert is the "review this" hidden-change
  // signal (pruefen/yellow styling, matches severity 'pruefen' upstream).
  if (status === "formel_zu_konstante")
    return "bg-status-red-strong text-foreground font-semibold"
  if (status === "formel_geaendert")
    return "bg-status-yellow text-foreground font-semibold"
  if (
    status === "konstant" ||
    status === "nicht_berechenbar" ||
    status === "nicht_anwendbar"
  )
    return "bg-muted text-muted-foreground"
  if (dir === "flat") return "bg-muted text-muted-foreground"
  const higherIsBetter =
    field !== undefined && HIGHER_IS_BETTER_FIELDS.has(field)
  const unfavorable = (dir === "up") !== higherIsBetter
  return unfavorable
    ? "bg-status-red-strong text-foreground"
    : "bg-status-green text-foreground"
}

export function severityClass(sev: string): string {
  if (sev === "kritisch") return "bg-status-red-strong text-foreground"
  if (sev === "pruefen") return "bg-status-yellow text-foreground"
  return "bg-status-grey text-foreground"
}

// Plausibilitäts-Badge (Loop 10 Modul 3): die EINORDNUNG eines Befunds
// (Blockiert / Nicht prüfbar / Schweregrad — Regel-Engine KAR-889/P0.4,
// Rekonziliation KAR-887/P0.2, Master-Prompt §13) ist Fachregel und wird
// seit der View-Spec-Adoption in `plausibilityBadge` (lib/qaf-differences/
// internal/appendix-run.ts) zur Build-Zeit bestimmt. Hier lebt nur noch das
// Mapping der semantischen Badge-Art auf die Tailwind-Klasse — Klassennamen
// gehören bewusst nicht in den portablen Kern (Kopfkommentar oben).
export function plausibilityKindClass(kind: PlausibilityBadgeKind): string {
  if (kind === "blockiert")
    return "bg-status-red-strong text-foreground font-semibold"
  if (kind === "nicht_pruefbar")
    return "bg-status-grey text-muted-foreground italic"
  return severityClass(kind)
}
