/**
 * POST /api/settings/price-sheet/resolve — body: SheetOptions → { status, sheet: PriceSheet }
 * `shipperIds` with more than one carrier resolves one sheet per carrier and merges them
 * (mergePriceSheets: rows / services / surcharges tagged with their carrier).
 */
import { withIdempiere } from '../../../utils/shipping/withIdempiere'
import { resolvePriceSheet } from '../../../utils/shipping/priceSheet'
import { mergePriceSheets, sheetShipperIds } from '../../../../app/utils/shippingPriceSheet'

export default defineEventHandler(withIdempiere(async (event, token) => {
  const body: any = await readBody(event).catch(() => ({}))
  try {
    const ids = sheetShipperIds(body || {})
    const sheets = await Promise.all(ids.map((shipperId) => resolvePriceSheet(event, token, { ...(body || {}), shipperId, shipperIds: ids })))
    const sheet = mergePriceSheets(sheets)
    if (ids.length === 1) sheet.carriers = [{ shipperId: ids[0], shipperName: sheet.shipperName }]
    return { status: 200, sheet }
  } catch (err: any) {
    if (Number(err?.statusCode) === 401 || Number(err?.status) === 401) throw err
    const status = Number(err?.statusCode ?? err?.status ?? err?.response?.status) || 500
    return { status, message: err?.statusMessage || err?.data?.detail || err?.data?.title || err?.message || 'Resolve failed' }
  }
}))
