import type { SupplierPickerValue } from '@/components/intake/supplier-picker'

interface PreviousSupplier {
  supplier_name: string | null
  supplier_id: string | null
}

/**
 * Leitet den supplier-Anteil eines Assignment-Updates aus dem Picker-State ab
 * (KAR-704/A1 Stufe 2).
 *
 * Invariante: ein bestehender Stammdaten-FK wird nur gelöst, wenn der Nutzer
 * den Lieferanten tatsächlich verändert hat. Der Picker rekonstruiert
 * Bestandswerte als Freitext (Assignment trägt nur die nackte supplier_id,
 * kein hydriertes Stammdaten-Objekt) — ohne diesen Vergleich würde jeder
 * unbezogene Edit (Status, Datum, …) den FK still nullen.
 */
export function deriveSupplierPatch(
  value: SupplierPickerValue,
  previous: PreviousSupplier,
): { supplier_name: string | null; supplier_id: string | null } {
  if (value?.kind === 'master_data') {
    return { supplier_name: value.supplier.supplier_name, supplier_id: value.supplier_id }
  }
  const supplier_name = value ? value.freetext.trim() || null : null
  const unchanged = supplier_name === (previous.supplier_name ?? null)
  return { supplier_name, supplier_id: unchanged ? (previous.supplier_id ?? null) : null }
}
