// Pre-flight for serial capture: which of these serials already exist in this
// org, and which of them still carry stock (→ would be rejected on booking).
// Body { organizationId?, serials: string[] } (max 500).
import getTokenHelper from "../../utils/getTokenHelper"
import withAuthRetry from "../../utils/withAuthRetry"
import { findAsisBySerials } from "../../utils/attributeTracking"

const handleFunc = async (event: any, authToken: any = null) => {
  const token = authToken ?? await getTokenHelper(event)
  const body = await readBody(event)
  const orgId = Number(body?.organizationId || getCookie(event, 'logship_organization_id')) || 0
  const serials: string[] = Array.isArray(body?.serials) ? body.serials.map((s: any) => String(s ?? '').trim()).filter(Boolean) : []
  if (!orgId) return { status: 400, message: 'Organisation fehlt', known: [] }
  if (serials.length > 500) return { status: 400, message: 'Maximal 500 Seriennummern pro Prüfung', known: [] }
  if (!serials.length) return { status: 200, known: [] }

  const known = await findAsisBySerials(event, token, orgId, serials)
  return {
    status: 200,
    known: Array.from(known.values()).map((k) => ({ serNo: k.serNo, asiId: k.asiId, inStock: k.inStock, lot: k.lot, mhd: k.mhd }))
  }
}

export default defineEventHandler(async (event) => withAuthRetry(event, handleFunc))
