// Canonical QAF section structure (KAR-844). Kais: every analysis shows the
// SAME numbered sections in the SAME order ("Wiedererkennungswert") — sections
// a QAF type cannot fill appear as compact explained placeholders instead of
// silently missing. Numbers and titles live here only.
// tdd-guard:skip — static registry, no logic.

import type { SectionInfo } from '@/components/qaf-differences/qaf-section'

export const QAF_SECTION_TITLES = {
  overview: '1. Überblick',
  form: '2. QAF-Übersicht (Form-Ansicht)',
  buckets: '3. Kostenstruktur — Buckets',
  bridge: '4. Woher der Unterschied kommt — Kostenbrücke',
  metrics: '5. Kennzahlen-Vergleich',
  prod: '6. Produktionssicht / Raten',
  anomalies: '7. Anomalien & Treiber (Master-Sätze)',
  movers: '8. Größte Preistreiber',
  negotiation: '9. Verhandlung — Quick Wins & Große Bringer',
  levers: '10. Die Hebel — und wie wir sie kontern',
  scenario: '11. Szenario-Editor — Bestandsaufnahme → Potential',
  projection: '12. Hochrechnung & Potenzial in €',
  onetime: '13. Einmalzahlungen',
  fazit: '14. Management-Fazit',
} as const

export type QafSectionKey = keyof typeof QAF_SECTION_TITLES

// KAR-966: SUMMARY_PLACEHOLDERS (prod/anomalies/scenario blanket-claim
// strings) removed — KAR-960/P3 already made prod/anomalies capability-based
// (production-view.ts), and KAR-966 item 2 does the same for scenario
// (scenarioAvailability). All three had zero remaining static-string
// consumers once qaf-comparison-detail.tsx's scenario section switched over
// (verified: repo-wide grep for SUMMARY_PLACEHOLDERS before removal).

export const G60_PLACEHOLDERS = {
  form: 'G60-Detail-QAFs haben kein Zusammenfassungs-Formular — die Kennzahlen stehen je Kostenreiter in Sektion 5.',
  negotiation: 'Quick Wins & Große Bringer je Kennzahl gibt es im Summary-Vergleich — für G60 übernimmt der Szenario-Editor (Sektion 11) diese Rolle je Kostenreiter.',
  onetime: 'G60-Detail-QAFs führen keine Einmalzahlungs-Positionen — die stehen im Summary-QAF.',
  fazit: 'Das automatische Management-Fazit wird aus dem Summary-Vergleich generiert.',
} as const

/** Per-instance fallback: the section exists for this QAF type, but this
 * comparison's files don't carry the needed values. */
export const NO_DATA_REASON =
  'Für diesen Vergleich nicht berechenbar — die nötigen Werte fehlen in den QAF-Dateien.'

/**
 * PR #328 review fix (finding [2]/[3]/task f): shown instead of the
 * Szenario-Editor (Sektion 11) whenever the NEU-Datei's INPUT-Ratenkarte
 * hard-broken ist (structure-guard.ts `rateDegradation`). The live
 * "Was-wäre-wenn"-Rechner (scenario.ts) recomputes SGA/Profit fresh from
 * `raw.rates` on every edit — those rates are exactly what the structure
 * guard just flagged as unverifiable, so a live recompute would silently
 * disagree with the persisted (withheld/null) SGA/Profit the moment a user
 * touches the editor. Disabled with a stated reason rather than risking
 * that divergence (task instruction: "notfalls Scenario-Editor bei
 * rateDegradation deaktivieren mit Grund").
 */
export const SCENARIO_RATE_DEGRADED_REASON =
  'Der Szenario-Editor ist deaktiviert: Die INPUT-Ratenkarte der NEU-Datei ist stark beschädigt (Bezeichner B22-B29 fehlen), SG&A/Profit sind je Kostenreiter als fehlend markiert. Eine Live-Neuberechnung würde von diesen als fehlend markierten Werten abweichen — siehe „Struktur-Plausibilität (G60)" oben.'

/** ⓘ texts for the SUMMARY view (the G60 view has its own in qaf-g60-section-info.ts). */
export const SUMMARY_SECTION_INFO: Partial<Record<QafSectionKey, SectionInfo>> = {
  form: {
    text: 'Die 6 offiziellen Formularzeilen des QAF-Zusammenfassungs-Blatts (Material bis Angebotspreis) im ALT/NEU-Vergleich — die Ansicht, die jeder aus dem Excel kennt.',
    formula: 'Δ % = (NEU − ALT) / |ALT| je Formularzeile · Scrap = Scrap Material + Scrap Fertigung',
  },
  buckets: {
    text: 'Verteilt den Angebotspreis auf die Kostenblöcke und vergleicht ALT mit NEU — auf einen Blick sichtbar, WO der Lieferant teurer geworden ist.',
    formula: 'Material · Manufacturing · Scrap (Material+Fertigung) · SG&A — direkt aus den Zusammenfassungs-Metriken',
    example: 'Material −53 % bei Fertigung +456 %: die Erhöhung kommt aus der Fertigung, nicht aus Rohstoffen — dort ansetzen.',
  },
  bridge: {
    text: 'Erklärt Schritt für Schritt, wie aus dem ALT-Preis der NEU-Preis wird: jeder Balken ist der Beitrag einer Kennzahl (rot = verteuert, grün = verbilligt).',
    formula: 'ALT + Σ Kennzahlen-Deltas + Übrige = NEU',
    example: 'ALT 2,49 € → +2,10 € Fertigung, −0,84 € Material → NEU 3,78 €.',
  },
  metrics: {
    text: 'Alle 19 Geld-Kennzahlen des Zusammenfassungs-Blatts mit Quellzelle (Provenance) und Status — die belastbare Zahlenbasis für jede Diskussion.',
    formula: 'Δ % = (NEU − ALT) / |ALT| · Quellzellen wie im Original-QAF (z. B. C26/P26)',
  },
  // KAR-960/P3: these two used to have NO entry here at all (they were
  // unconditional PlaceholderSections, never a real Section — see
  // SUMMARY_PLACEHOLDERS.prod/anomalies above, now superseded for the
  // capability-based render in qaf-comparison-detail.tsx).
  prod: {
    text: 'Prozess-Parameter je Fertigungsschritt aus dem Fertigungskosten-Blatt (Zykluszeit, Maschinenstundensatz, Personal, Lohnsatz, Ausschuss) — ALT/NEU nebeneinander, sofern das Blatt geparst werden konnte.',
    formula: 'Direkt aus qaf_manufacturing_step.raw_values, gruppiert auf Positionsnummer — keine Deltas, reine Rateneinsicht.',
  },
  anomalies: {
    text: 'Master-Sätze (Lohnsatz, SG&A, Gewinn, Scrap) aus dem Zusammenfassungs-Blatt, sofern eindeutig per Label gefunden — mehrdeutige Treffer werden als Konflikt markiert statt geraten.',
    formula: 'Label-Scan über das ganze Blatt; 1 Treffer = übernommen, 2+ übereinstimmende = bestätigt, 2+ widersprüchliche = markiert.',
  },
  movers: {
    text: 'Sortiert die Positionen nach ihrem Beitrag zur Preisänderung — oben stehen die Punkte, über die es sich zu verhandeln lohnt.',
    formula: 'Δ = Fertigungskosten NEU − ALT je Prozessschritt (bzw. je Vergleichsobjekt ohne Detaildaten)',
  },
  negotiation: {
    text: 'Automatisch aus den Kennzahlen-Deltas sortiert: Quick Wins (wo NEU besser ist — klar argumentierbar) und Große Bringer (größte Verteuerungen — größter Hebel).',
    example: 'Ein Quick Win „Scrap −20 %" belegt Verbesserung; ein Bringer „Fertigung +456 %" ist der Kern der Gegenforderung.',
  },
  levers: {
    text: 'Die wirksamsten Verhandlungshebel aus den Prozess-Raten-Deltas (Zykluszeit, MSS, Lohn, Personal), jeweils mit konkreter Forderung.',
    formula: 'Hebel ab |Δ| ≥ 5 % je Prozess-KPI',
  },
  // KAR-966 item 2: previously had NO entry (unconditional PlaceholderSection,
  // no real Section at all) — now capability-gated (scenarioAvailability,
  // production-view.ts), same as prod/anomalies above.
  scenario: {
    text: 'Interaktives Was-wäre-wenn auf den Kostenreiter-Rohzeilen eines G60-Detail-QAFs (Zykluszeit/Personal/Lohnsatz/MSS/Scrap je Zeile) — rechnet Angebotspreis-Änderungen sofort gegen den gecachten Ausgangswert.',
    formula: 'Delta-Anchoring: gecachter Angebotspreis + (Szenario-Neuberechnung − Basis-Neuberechnung) je Bucket.',
  },
  projection: {
    text: 'Rechnet die Mehr-/Minderkosten je Stück über die Jahres-Stückzahlen hoch. Die Abwehrquote simuliert, wie viel der Erhöhung ihr in der Verhandlung abwehrt (wirkt nur auf Mehrkosten).',
    formula: 'Δ restant/Jahr = Δ je Stück × Volumen × (1 − Abwehrquote) — nur bei Δ > 0',
    example: '1,29 € Mehrkosten × 250.000 Stück = 322.500 €/Jahr; bei 25 % Abwehr bleiben 241.875 €.',
  },
  onetime: {
    text: 'Einmalzahlungen aus dem QAF (Entwicklung, Sonderbetriebsmittel) im ALT/NEU-Vergleich — konstant gebliebene Positionen sind ein Argument gegen pauschale Erhöhungen.',
  },
  fazit: {
    text: 'Automatisch generierte Zusammenfassung der Haupttreiber in Managementsprache — als Einstieg für Berichte, immer gegen die Zahlen oben prüfen.',
  },
}
