// Loop 12 (Exporte und Präsentation): EIN Versionsregister für alle
// Exportprofile.
//
// Vorher trug jedes Profil sein eigenes Vokabular (`version: 2` im
// ViewModel-JSON, gar nichts im XLSX, nichts in den Copilot-Ausgaben,
// `canonical_schema_version` im kanonischen Vertrag). Wer zwei Dateien
// nebeneinanderlegte, konnte nicht sagen, mit welchem Stand welche erzeugt
// wurde. Jetzt stempelt jedes Profil dieselbe Struktur — das kanonische
// Manifest bleibt die ausführliche Referenz, dieser Stempel ist ihr
// Kurzform-Pendant für die übrigen Profile.
//
// Regel: jede inhaltliche Änderung an einem Profil erhöht seine Version hier.
// Pure Daten, keine I/O.
//
// Review-Fix #489: canonical_json und ai_package REFERENZIEREN ihre
// Quell-Konstanten statt sie zu duplizieren — ein Version-Bump an der Quelle
// hätte das Register sonst lautlos desynchronisiert (genau der Drift, den
// dieses Modul verhindern soll).

import { CANONICAL_SCHEMA_VERSION } from './canonical-export'
import { AI_PACKAGE_VERSION } from './ai-package'

export const EXPORT_PROFILES = {
  /** Kanonisches Voll-JSON (Loop 6) — Version identisch mit dem Schema. */
  canonical_json: CANONICAL_SCHEMA_VERSION,
  /** AI-Paket (Loop 13) — Version identisch mit ai_package_version. */
  ai_package: AI_PACKAGE_VERSION,
  /** PPTX-Wiedergabe-Schicht (Loop 12 PR 2). */
  pptx_presentation: '1.0.0',
  /** ViewModel-Voll-JSON (V11-Export; trug bisher `version: 2`). */
  // 2.1.0 (Loop 10 View-Spec-Adoption Modul 2): NegotiationRow/OneTimeRow
  // tragen additiv `key` (SummaryMetricKey) — sections.negotiation und
  // sections.oneTimePayments im ViewModel-JSON erweitern sich entsprechend.
  // 2.2.0 (Hebel-Belege): sections.levers-Einträge tragen additiv
  // altCell/neuCell (A1-Zellbeleg des gematchten Prozessschritts, null bei
  // fehlendem Match/Quellzellen — LeverSpec, levers-run.ts).
  viewmodel_json: '2.2.0',
  /** Excel-Arbeitsmappe des Vergleichs (trug bisher keinen Stempel). */
  xlsx_workbook: '1.0.0',
  /** Copilot-Word-Export (trug bisher keinen Stempel). */
  copilot_docx: '1.0.0',
  /** Copilot-Markdown-Export (trug bisher keinen Stempel). */
  copilot_md: '1.0.0',
} as const

export type ExportProfileId = keyof typeof EXPORT_PROFILES

export interface ExportProfileStamp {
  profile: ExportProfileId
  profile_version: string
}

export function exportProfileStamp(profile: ExportProfileId): ExportProfileStamp {
  return { profile, profile_version: EXPORT_PROFILES[profile] }
}

/** Der Stempel als eine Textzeile — für Profile ohne Strukturfelder
 * (Markdown-Kopf, DOCX-Metazeile, Zellkommentare). */
export function exportProfileStampLineDe(profile: ExportProfileId): string {
  return `Exportprofil: ${profile} v${EXPORT_PROFILES[profile]}`
}
