/**
 * POST /api/materials/locators/bulk-create — create many locators in one warehouse.
 * Body { warehouseId, organizationId, items: [{ x, y, z, value? }], priorityNo?, locatorTypeId?, isActive? } (≤ 500 items)
 * Response { status, created[], skipped[], failed[], totalRequested }
 */
import refreshTokenHelper from '../../../utils/refreshTokenHelper'
import forceLogoutHelper from '../../../utils/forceLogoutHelper'
import errorHandlingHelper from '../../../utils/errorHandlingHelper'
import getTokenHelper from '../../../utils/getTokenHelper'
import { MAX_BULK_ITEMS, bulkCreateLocators } from '../../../utils/locatorBulk'

const handleFunc = async (event: any, authToken: any = null) => {
  const token = authToken ?? await getTokenHelper(event)
  const body = await readBody(event)
  const warehouseId = Number(body?.warehouseId), organizationId = Number(body?.organizationId)
  if (!warehouseId || !organizationId) return { status: 400, message: 'warehouseId and organizationId are required' }
  const items = Array.isArray(body?.items) ? body.items : []
  if (!items.length) return { status: 400, message: 'items required' }
  if (items.length > MAX_BULK_ITEMS) return { status: 400, message: `max ${MAX_BULK_ITEMS} items per call` }
  const res = await bulkCreateLocators(event, token, { warehouseId, organizationId, items, priorityNo: Number(body?.priorityNo) || 50, isActive: body?.isActive !== false, locatorTypeId: body?.locatorTypeId ? Number(body.locatorTypeId) : null })
  return { status: 200, ...res }
}

export default defineEventHandler(async (event) => {
  let data: any = {}
  try {
    data = await handleFunc(event)
  } catch (err: any) {
    try {
      const authToken: any = await refreshTokenHelper(event)
      data = await handleFunc(event, authToken)
    } catch (error: any) {
      data = errorHandlingHelper(err?.data ?? err, error?.data ?? error)
      forceLogoutHelper(event, data)
    }
  }
  return data
})
