// Loop 12: das Export-Versionsregister — Form und Eindeutigkeit.

import { describe, expect, it } from 'vitest'
import {
  EXPORT_PROFILES,
  exportProfileStamp,
  exportProfileStampLineDe,
} from '@/lib/qaf-differences/internal/export-profiles'
import { CANONICAL_SCHEMA_VERSION } from '@/lib/qaf-differences/internal/canonical-export'
import { AI_PACKAGE_VERSION } from '@/lib/qaf-differences/internal/ai-package'

describe('EXPORT_PROFILES', () => {
  it('führt jedes Profil mit einer Semver-Version', () => {
    for (const [profil, version] of Object.entries(EXPORT_PROFILES)) {
      expect(version, `Profil ${profil}`).toMatch(/^\d+\.\d+\.\d+$/)
    }
  })

  it('kennt alle sieben Profile — ein still verschwundenes wäre genau der Drift', () => {
    expect(Object.keys(EXPORT_PROFILES).sort()).toEqual([
      'ai_package',
      'canonical_json',
      'copilot_docx',
      'copilot_md',
      'pptx_presentation',
      'viewmodel_json',
      'xlsx_workbook',
    ])
  })

  it('referenziert die Quell-Konstanten statt sie zu duplizieren (Review-Fix #489)', () => {
    // Ein Version-Bump an der Quelle darf das Register nicht lautlos
    // zurücklassen — deshalb Identität, nicht Gleichheit zweier Literale.
    expect(EXPORT_PROFILES.canonical_json).toBe(CANONICAL_SCHEMA_VERSION)
    expect(EXPORT_PROFILES.ai_package).toBe(AI_PACKAGE_VERSION)
  })

  it('stempelt Struktur und Textzeile konsistent', () => {
    expect(exportProfileStamp('viewmodel_json')).toEqual({
      profile: 'viewmodel_json',
      // 2.2.0: Hebel-Belege — additive altCell/neuCell-Zellbelege in
      // sections.levers (CHANGELOG 15.08.; 2.1.0 war das additive
      // `key`-Feld aus Loop 10 Modul 2).
      profile_version: '2.2.0',
    })
    expect(exportProfileStampLineDe('copilot_md')).toBe('Exportprofil: copilot_md v1.0.0')
  })
})
