import { overseasRequest, overseasUpload, overseasDownload } from './overseas.js' const BASE = '/pda/v1/last-leg/relabel-tasks' const encoded = (value) => encodeURIComponent(String(value || '').trim()) export const scanRelabelSku = async (no, payload) => normalizeRelabel(await overseasRequest('POST', `${BASE}/${encoded(no)}/skus/scan`, payload)) export const completeReturnRelabelSku = async (no, payload) => normalizeRelabel(await overseasRequest('POST', `${BASE}/${encoded(no)}/return-skus/complete`, payload)) export const packReturnRelabelCartons = async (no, payload) => normalizeRelabel(await overseasRequest('POST', `${BASE}/${encoded(no)}/return-cartons/pack`, payload)) export const completeReturnRelabelSkuTotal = async (no, payload) => normalizeRelabel(await overseasRequest('POST', `${BASE}/${encoded(no)}/return-skus/complete-total`, payload)) function asList(value) { return Array.isArray(value) ? value : [] } export function normalizeRelabel(value = {}) { const items = asList(value.items).map((item) => ({ ...item, itemId: String(item.itemId || ''), skuCode: String(item.skuCode || ''), returnCartonId: item.returnCartonId == null ? null : String(item.returnCartonId), returnQuantity: Number(item.returnQuantity || 0), newSkuCode: String(item.newSkuCode || ''), operationType: String(item.operationType || 'CARTON_LABEL'), expectedPackages: Number(item.expectedPackages || 0), relabelledPackages: Number(item.relabelledPackages || 0), skippedPackages: Number(item.skippedPackages || 0), exceptionPackages: Number(item.exceptionPackages || 0) })) const inferredOperationType = items.some((item) => item.operationType === 'CARTON_AND_SKU') ? 'CARTON_AND_SKU' : items.some((item) => item.operationType === 'SKU_LABEL') ? (items.some((item) => item.operationType !== 'SKU_LABEL') ? 'CARTON_AND_SKU' : 'SKU_LABEL') : 'CARTON_LABEL' return { ...value, relabelNo: String(value.relabelNo || ''), customerOrderNo: String(value.customerOrderNo || ''), version: Number(value.version || 0), expectedPackages: Number(value.expectedPackages || 0), operationType: String(value.operationType || inferredOperationType), relabelledPackages: Number(value.relabelledPackages || 0), skippedPackages: Number(value.skippedPackages || 0), exceptionPackages: Number(value.exceptionPackages || 0), items, unitFacts: asList(value.unitFacts), history: asList(value.history), completionPhotoFileIds: asList(value.completionPhotoFileIds).map(String) } } export async function listRelabelCandidates() { return asList(await overseasRequest('GET', `${BASE}/candidates`)).map(normalizeRelabel) } export async function getRelabelTask(relabelNo) { return normalizeRelabel(await overseasRequest('GET', `${BASE}/${encoded(relabelNo)}`)) } async function detailAction(relabelNo, suffix, request) { return normalizeRelabel(await overseasRequest('POST', `${BASE}/${encoded(relabelNo)}${suffix}`, request)) } export const claimRelabelTask = (relabelNo, request) => detailAction(relabelNo, '/claim', request) export const scanRelabelCarton = (relabelNo, request) => detailAction(relabelNo, '/cartons/scan', request) export const listRelabelDocuments = (relabelNo) => overseasRequest('GET', `${BASE}/${encoded(relabelNo)}/documents`) export const downloadRelabelDocument = (relabelNo, file) => overseasDownload(`${BASE}/${encoded(relabelNo)}/documents/${encoded(file.fileId)}/download?scope=${encoded(file.scope)}${file.itemId ? `&itemId=${encoded(file.itemId)}` : ''}`) export const relabelUnit = (relabelNo, request) => detailAction(relabelNo, '/units', request) export const skipRelabelUnit = (relabelNo, request) => detailAction(relabelNo, '/units/skip', request) export const reportRelabelException = (relabelNo, request) => detailAction(relabelNo, '/exceptions', request) export const completeRelabelTask = (relabelNo, request) => detailAction(relabelNo, '/complete', request) export const reviewRelabelTask = (relabelNo, request) => detailAction(relabelNo, '/review', request) export const uploadRelabelPhoto = (relabelNo, filePath) => overseasUpload(`${BASE}/${encoded(relabelNo)}/photos/files`, filePath) export const downloadRelabelPhoto = (relabelNo, fileId) => overseasDownload(`${BASE}/${encoded(relabelNo)}/photos/files/${encoded(fileId)}/download`, { expectedContentTypePrefix: 'image/' })