// KAR-704/A1 Stufe 2 — deriveSupplierPatch: FK-erhaltende Ableitung des
// supplier-Anteils im Assignment-Update (Review-Finding: FK darf bei
// unberührtem Lieferanten-Feld NICHT genullt werden).

import { describe, it, expect } from 'vitest'
import { deriveSupplierPatch } from '../supplier-patch'
import type { SupplierPickerValue } from '@/components/intake/supplier-picker'

const SUPPLIER = {
  id: '7b1f4c2d-6e5a-4f3b-8c9d-0a1b2c3d4e5f',
  supplier_number: '10234',
  supplier_name: 'Acme AG',
  supplier_location: null,
  plant: null,
  country: 'DE',
  city: 'München',
}

describe('deriveSupplierPatch', () => {
  it('Stammdaten-Auswahl setzt Name kanonisch + FK', () => {
    const value: SupplierPickerValue = { kind: 'master_data', supplier_id: SUPPLIER.id, supplier: SUPPLIER }
    expect(deriveSupplierPatch(value, { supplier_name: null, supplier_id: null }))
      .toEqual({ supplier_name: 'Acme AG', supplier_id: SUPPLIER.id })
  })

  it('unveränderter Freitext behält einen bestehenden FK (unbezogener Edit)', () => {
    const value: SupplierPickerValue = { kind: 'freetext', freetext: 'Acme AG' }
    expect(deriveSupplierPatch(value, { supplier_name: 'Acme AG', supplier_id: SUPPLIER.id }))
      .toEqual({ supplier_name: 'Acme AG', supplier_id: SUPPLIER.id })
  })

  it('geänderter Freitext löst den FK', () => {
    const value: SupplierPickerValue = { kind: 'freetext', freetext: 'Anderer Lieferant' }
    expect(deriveSupplierPatch(value, { supplier_name: 'Acme AG', supplier_id: SUPPLIER.id }))
      .toEqual({ supplier_name: 'Anderer Lieferant', supplier_id: null })
  })

  it('geleertes Feld löscht Name + FK', () => {
    expect(deriveSupplierPatch(null, { supplier_name: 'Acme AG', supplier_id: SUPPLIER.id }))
      .toEqual({ supplier_name: null, supplier_id: null })
  })

  it('Whitespace-Freitext zählt als leer', () => {
    const value: SupplierPickerValue = { kind: 'freetext', freetext: '   ' }
    expect(deriveSupplierPatch(value, { supplier_name: 'Acme AG', supplier_id: SUPPLIER.id }))
      .toEqual({ supplier_name: null, supplier_id: null })
  })

  it('leeres Feld bei leerem Bestand bleibt neutral', () => {
    expect(deriveSupplierPatch(null, { supplier_name: null, supplier_id: null }))
      .toEqual({ supplier_name: null, supplier_id: null })
  })

  it('Freitext getrimmt-gleich zum Bestand behält den FK', () => {
    const value: SupplierPickerValue = { kind: 'freetext', freetext: '  Acme AG  ' }
    expect(deriveSupplierPatch(value, { supplier_name: 'Acme AG', supplier_id: SUPPLIER.id }))
      .toEqual({ supplier_name: 'Acme AG', supplier_id: SUPPLIER.id })
  })
})
