import type { MesProWorkOrderProcessApi } from './index';

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

export namespace MesProWorkOrderProcessApi {
  /** 工序投料BOM明细 */
  export interface ProcessBomItem {
    itemId?: number;
    itemCode?: string;
    itemName?: string;
    quantity?: number;
    remark?: string;
  }

  /** MES 生产工单工序 */
  export interface WorkOrderProcess {
    id?: number; // 编号
    workOrderId?: number; // 生产工单编号
    processId?: number; // 工序编号
    processCode?: string; // 工序编码
    processName?: string; // 工序名称
    sort?: number; // 序号
    nextProcessId?: number; // 下一道工序编号
    nextProcessName?: string; // 下一道工序名称
    linkType?: number; // 与下一道工序关系
    prepareTime?: number; // 准备时间（分钟）
    waitTime?: number; // 等待时间（分钟）
    colorCode?: string; // 甘特图显示颜色
    keyFlag?: boolean; // 是否关键工序
    checkFlag?: boolean; // 是否质检工序
    backflushFlag?: boolean; // 是否倒冲
    outputItemId?: number; // 产出产品物料编号
    outputItemCode?: string; // 产出产品物料编码
    outputItemName?: string; // 产出产品物料名称
    bomItems?: ProcessBomItem[]; // 工序投料BOM明细
    remark?: string; // 备注
  }
}

/** 查询工单工序列表 */
export function getWorkOrderProcessListByWorkOrderId(workOrderId: number) {
  return requestClient.get<MesProWorkOrderProcessApi.WorkOrderProcess[]>(
    `/mes/pro/work-order-process/list-by-work-order-id?workOrderId=${workOrderId}`,
  );
}

/** 根据产品获取工艺路线工序列表（用于工单预填） */
export function getProcessListByProductId(productId: number) {
  return requestClient.get<MesProWorkOrderProcessApi.WorkOrderProcess[]>(
    `/mes/pro/work-order-process/list-by-product-id?productId=${productId}`,
  );
}

/** 批量保存工单工序（新增+更新+删除） */
export function batchSaveWorkOrderProcess(data: MesProWorkOrderProcessApi.WorkOrderProcess[]) {
  return requestClient.post('/mes/pro/work-order-process/batch-save', data);
}

/** 查询工单工序详情 */
export function getWorkOrderProcess(id: number) {
  return requestClient.get<MesProWorkOrderProcessApi.WorkOrderProcess>(
    `/mes/pro/work-order-process/get?id=${id}`,
  );
}

/** 新增工单工序 */
export function createWorkOrderProcess(data: MesProWorkOrderProcessApi.WorkOrderProcess) {
  return requestClient.post<number>('/mes/pro/work-order-process/create', data);
}

/** 修改工单工序 */
export function updateWorkOrderProcess(data: MesProWorkOrderProcessApi.WorkOrderProcess) {
  return requestClient.put('/mes/pro/work-order-process/update', data);
}

/** 删除工单工序 */
export function deleteWorkOrderProcess(id: number) {
  return requestClient.delete(`/mes/pro/work-order-process/delete?id=${id}`);
}