import { http, unwrapApiResponse, type ApiEnvelope } from '@/shared/api/http' export type MojiaSkuSyncStatus = 'PENDING' | 'SUCCESS' | 'FAILED' export type MojiaMeasurementKind = 'BOX_LABEL' | 'SKU' export interface MojiaSkuSyncRecord { id: string measurementKind: MojiaMeasurementKind boxCode: string inboundCode?: string | null skuCode?: string | null lengthCm: number widthCm: number heightCm: number weightKg: number imageFileId?: string | null imageUrl?: string | null measuredAt?: string | null receivedAt?: string | null syncStatus?: MojiaSkuSyncStatus | null syncFailureCode?: string | null syncFailureReason?: string | null lingxingSkuId?: string | null revision: number updatedAt?: string | null } export interface MojiaSkuSyncPage { records: MojiaSkuSyncRecord[] page: number size: number total: number pages: number } export interface MojiaSkuSyncQuery { page: number size: number code?: string measurementKind?: MojiaMeasurementKind syncStatus?: MojiaSkuSyncStatus } export interface MojiaSkuSyncConfig { autoSyncEnabled: boolean } export interface LingxingWarehouseTestResult { whCode: string reachable: boolean matched: boolean maintained: boolean productSku?: string | null barcode?: string | null length?: number | null width?: number | null height?: number | null weight?: number | null message: string } export interface LingxingConnectionTestResult { skuCode: string warehouses: LingxingWarehouseTestResult[] } const basePath = '/platform/v1/firstleg/mojia-sku-sync' export async function listMojiaSkuSync(query: MojiaSkuSyncQuery) { const response = await http.get, ApiEnvelope>( basePath, { params: query }, ) return unwrapApiResponse(response) } export async function getMojiaSkuSyncConfig() { const response = await http.get, ApiEnvelope>( `${basePath}/config`, ) return unwrapApiResponse(response) } export async function testLingxingConnection(skuCode: string) { const response = await http.post, ApiEnvelope>( `${basePath}/test-connection`, { skuCode }, ) return unwrapApiResponse(response) } export async function submitLingxingVerificationCode(code: string) { const response = await http.post, ApiEnvelope>( `${basePath}/verification-code`, { code }, ) return unwrapApiResponse(response) } export async function updateMojiaSkuSync(id: string, data: { skuCode: string lengthCm: number widthCm: number heightCm: number weightKg: number revision: number }) { const response = await http.put, ApiEnvelope>( `${basePath}/${encodeURIComponent(id)}`, data, ) return unwrapApiResponse(response) } export async function retryMojiaSkuSync(id: string, revision: number) { const response = await http.post, ApiEnvelope>( `${basePath}/${encodeURIComponent(id)}/retry`, { revision }, ) return unwrapApiResponse(response) }