import { requestClient } from '#/api/request';

export namespace MesTraceBatchApi {
  export interface Worker {
    workerType?: number;
    workerTypeName?: string;
    userName?: string;
    remark?: string;
  }

  export interface Pallet {
    code?: string;
    palletNo?: number;
    bagCount?: number;
    capacity?: number;
  }

  export interface Bag {
    code?: string;
    bagNo?: number;
    palletCode?: string;
    status?: number;
    statusName?: string;
    inboundTime?: string;
  }

  export interface Inbound {
    eventId?: string;
    deviceCode?: string;
    lineCode?: string;
    quantity?: number;
    status?: string;
    eventTime?: string;
  }

  export interface Indicator {
    indicatorCode?: string;
    indicatorName?: string;
    value?: number;
    minValue?: number;
    maxValue?: number;
    pass?: boolean;
  }

  export interface Quality {
    result?: number;
    resultName?: string;
    reason?: string;
    inspectorName?: string;
    inspectedAt?: string;
    indicators?: Indicator[];
  }

  export interface PurchaseSource {
    receiptCode?: string;
    receiptDate?: string;
    purchaseOrderCode?: string;
    vendorCode?: string;
    vendorName?: string;
    iqcCode?: string;
    checkResult?: number;
    itemCode?: string;
    itemName?: string;
    receivedQuantity?: number;
  }

  export interface SalesTarget {
    salesCode?: string;
    salesDate?: string;
    salesOrderCode?: string;
    clientName?: string;
    oqcCode?: string;
    checkResult?: number;
    itemCode?: string;
    itemName?: string;
    quantity?: number;
    qualityStatus?: number;
  }

  export interface ProcessTrace {
    eventType?: 'OUT' | 'IN';
    workOrderCode?: string;
    processCode?: string;
    processName?: string;
    quantity?: number;
    qualityStatus?: number;
    eventTime?: string;
  }

  export interface Timeline {
    stage?: string;
    eventType?: string;
    eventName?: string;
    eventTime?: string;
    quantity?: number;
    status?: string;
  }

  export interface Decision {
    qualityRisk?: boolean;
    inboundQuantity?: number;
    salesTargetCount?: number;
    consumerScanCount?: number;
    riskLevel?: string;
  }

  export interface Detail {
    sourceType?: string;
    requestCode?: string;
    itemCode?: string;
    itemName?: string;
    itemSpecification?: string;
    batchCode?: string;
    tempCode?: string;
    batchStatus?: number;
    batchStatusName?: string;
    produceDate?: string;
    lineCode?: string;
    lineName?: string;
    ownerUserName?: string;
    planQuantity?: number;
    bagQuantity?: number;
    palletQuantity?: number;
    inboundTime?: string;
    remark?: string;
    workers?: Worker[];
    palletCount?: number;
    pallets?: Pallet[];
    bagTotal?: number;
    bags?: Bag[];
    inbound?: Inbound;
    quality?: Quality;
    antiFake?: {
      scanCount?: number;
      firstScanTime?: string;
      lastScanTime?: string;
    };
    purchaseSources?: PurchaseSource[];
    salesTargets?: SalesTarget[];
    processTraces?: ProcessTrace[];
    timeline?: Timeline[];
    decision?: Decision;
  }
}

export function getBatchTraceDetail(code: string) {
  return requestClient.get<MesTraceBatchApi.Detail>('/mes/trace/batch/detail', {
    params: { code },
  });
}