// Which CUST_Printer (by CupsName) return labels print to on this device —
// switchable via the nav-bar picker (RmasReturnLabelPrinterPicker, admin
// only), remembered per browser like the click-to-dial extension
// (localStorage.logship_dial_ext in DialButton.vue).
const LS_KEY = 'logship_return_label_printer'
const readRemembered = () => {
  try { return localStorage.getItem(LS_KEY) || '' } catch { return '' }
}
const remember = (v: string) => {
  try {
    if (v) localStorage.setItem(LS_KEY, v)
    else localStorage.removeItem(LS_KEY)
  } catch { /* ignore */ }
}

export const useReturnLabelPrinter = () => {
  const queue = useReturnLabelPrinterQueue()
  const { data: printersData } = useLookup('/api/printers')
  const labelPrinters = computed(() => (printersData.value?.records || []).filter((p: any) => p.printerType === 'lab'))

  // Hydrate from localStorage strictly after mount (never in setup) so the
  // client's first render matches SSR markup — this then lands as a normal
  // reactive update, not a hydration mismatch.
  onMounted(() => {
    const remembered = readRemembered()
    if (remembered) queue.value = remembered
  })

  // Snap a stale/empty/deleted-printer selection to a valid one, same idiom
  // as bom-productions.vue's paperPrinters watch. Fallback: org's isDefault
  // lab printer, else the lab printer with the smallest id (deterministic).
  watch(labelPrinters, (printers) => {
    if (printers.length === 0) return
    if (printers.some((p: any) => p.cupsName === queue.value)) return
    const byId = [...printers].sort((a: any, b: any) => a.id - b.id)
    queue.value = (printers.find((p: any) => p.isDefault) || byId[0]).cupsName
  }, { immediate: true })

  watch(queue, (v) => remember(v))

  return { queue, labelPrinters }
}
