/**
 * POST /api/settings/price-sheet/row-persist (staff only) — persist ALL weight columns of a row as flat Tier rows
 * (a single tier edit would leave the other weights on the €25 billing fallback).
 * Body: { scope, organizationId, bpartnerId, shipperId, countryId, serviceCode, cells: { weight, prevWeight, price }[] }
 * → { status, rowIds, failed[] }
 */
import { gateFromEvent } from '../../../utils/chatAccess'
import { upsertTierRow } from '../../../utils/shipping/priceSheet'

export default defineEventHandler(async (event) => {
  const { token } = await gateFromEvent(event, { requireChat: false })
  const body: any = await readBody(event).catch(() => ({}))
  const cells: any[] = Array.isArray(body?.cells) ? body.cells.filter((c: any) => Number(c?.weight) > 0 && c?.price !== null && c?.price !== undefined) : []
  if (!cells.length) return { status: 400, message: 'cells missing' }
  const sorted = [...cells].sort((a, b) => Number(a.weight) - Number(b.weight))
  const rowIds: number[] = [], failed: { weight: number; message: string }[] = []
  let prev = 0
  for (const c of sorted) {
    try {
      const r = await upsertTierRow(event, token, { scope: body.scope, organizationId: Number(body.organizationId) || 0, bpartnerId: body.bpartnerId ?? null, shipperId: Number(body.shipperId), countryId: Number(body.countryId), mode: 'tier', weight: Number(c.weight), prevWeight: prev, price: Number(c.price), validFrom: body.validFrom, validTo: body.validTo })
      rowIds.push(r.rowId)
    } catch (err: any) {
      failed.push({ weight: Number(c.weight), message: err?.statusMessage || err?.data?.detail || err?.message || 'Save failed' })
    }
    prev = Number(c.weight)
  }
  return { status: failed.length ? 207 : 200, rowIds, failed }
})
