// A17 Export — Technisches JSON (Wertstrom P7).
// FIXTURE-DATEN-REGEL: every id/name/number below is FREE INVENTION.

import { describe, expect, it } from 'vitest'
import type { VsmNode } from '@/lib/vsm-types'
import { WERTSTROM_TECHNICAL_JSON_SCHEMA_VERSION, buildWertstromTechnicalJson } from '../vsm-export-json'

function input() {
  const nodes: VsmNode[] = [{ id: 'n1', type: 'process', x: 0, y: 0, name: 'Schweißen', cycleTimeSec: 45 }]
  return {
    id: 'vsm-1',
    title: 'Musterwerk Linie 3',
    description: 'Testbeschreibung',
    nodes,
    connections: [],
    layout: { viewport: { x: 0, y: 0, zoom: 1 } },
    is_demo: false,
    scenario_kind: 'current' as const,
    parent_value_stream_id: null,
    created_at: '2026-01-01T00:00:00Z',
    updated_at: '2026-07-01T00:00:00Z',
    generatedAtLabel: '22.07.2026, 10:00',
  }
}

describe('buildWertstromTechnicalJson', () => {
  it('carries the schema version and adapter id', () => {
    const payload = buildWertstromTechnicalJson(input())
    expect(payload.schemaVersion).toBe(WERTSTROM_TECHNICAL_JSON_SCHEMA_VERSION)
    expect(payload.adapter).toBe('kadi-v2.wertstrom.technical-export')
  })

  it('passes nodes/connections/layout/scenario metadata through verbatim (no recomputation)', () => {
    const raw = input()
    const payload = buildWertstromTechnicalJson(raw)
    expect(payload.valueStreamMap.nodes).toBe(raw.nodes)
    expect(payload.valueStreamMap.connections).toBe(raw.connections)
    expect(payload.valueStreamMap.layout).toEqual({ viewport: { x: 0, y: 0, zoom: 1 } })
    expect(payload.valueStreamMap.scenario_kind).toBe('current')
    expect(payload.valueStreamMap.parent_value_stream_id).toBeNull()
  })

  it('is JSON-serializable end to end', () => {
    const payload = buildWertstromTechnicalJson(input())
    expect(() => JSON.stringify(payload)).not.toThrow()
    const roundTrip = JSON.parse(JSON.stringify(payload))
    expect(roundTrip.valueStreamMap.title).toBe('Musterwerk Linie 3')
  })
})
