import type { PageParam, PageResult } from '@vben/request';

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

export namespace MesProMpsApi {
  /** MPS 主生产计划 */
  export interface Mps {
    id?: number; // MPS 编号
    code?: string; // MPS 编码
    status?: number; // 状态（0=草稿 1=已下发 2=已完成 3=已取消）
    saleOrderId?: number; // 销售订单ID
    saleOrderNo?: string; // 销售订单号
    saleOrderItemId?: number; // 销售订单明细ID
    productId?: number; // 产品ID
    productCode?: string; // 产品编码
    productName?: string; // 产品名称
    productSpecification?: string; // 规格型号
    unitMeasureName?: string; // 单位
    quantity?: number; // 计划生产数量
    quantityProduced?: number; // 已生产数量
    clientId?: number; // 客户ID
    clientCode?: string; // 客户编码
    clientName?: string; // 客户名称
    requestDate?: number; // 需求日期
    issueDate?: number; // 下发日期
    finishDate?: number; // 完成日期
    workOrderId?: number; // 生产工单ID
    workOrderCode?: string; // 生产工单编码
    mergeFlag?: number; // 是否合并下发（0-否，1-是）
    mergeBatchNo?: string; // 合并批次号
    remark?: string; // 备注
    createTime?: number; // 创建时间
  }

  /** MPS 分页查询参数 */
  export interface PageParams extends PageParam {
    code?: string;
    saleOrderNo?: string;
    productId?: number;
    clientId?: number;
    status?: number;
    requestDate?: number[];
  }

  /** MPS 创建请求 */
  export interface CreateMpsReq {
    code?: string;
    saleOrderId?: number;
    saleOrderNo?: string;
    saleOrderItemId?: number;
    productId?: number;
    quantity?: number;
    unitMeasureId?: number;
    clientId?: number;
    requestDate?: string;
    remark?: string;
  }
}

/** 查询 MPS 分页 */
export function getMpsPage(params: MesProMpsApi.PageParams) {
  return requestClient.get<PageResult<MesProMpsApi.Mps>>('/mes/pro-mps/page', {
    params,
  });
}

/** 查询 MPS 详情 */
export function getMps(id: number) {
  return requestClient.get<MesProMpsApi.Mps>(`/mes/pro-mps/get?id=${id}`);
}

/** 创建 MPS */
export function createMps(data: MesProMpsApi.CreateMpsReq) {
  return requestClient.post('/mes/pro-mps/create', data);
}

/** 更新 MPS */
export function updateMps(data: MesProMpsApi.CreateMpsReq & { id: number }) {
  return requestClient.put('/mes/pro-mps/update', data);
}

/** 删除 MPS */
export function deleteMps(ids: number[]) {
  return requestClient.delete('/mes/pro-mps/delete', {
    params: { ids: ids.join(',') },
  });
}

/** 导出 MPS Excel */
export function exportMps(params: any) {
  return requestClient.download('/mes/pro-mps/export-excel', { params });
}

/** 下发 MPS */
export function issueMps(id: number) {
  return requestClient.post(`/mes/pro-mps/issue?id=${id}`);
}

/** 合并下发 MPS */
export function mergeIssueMps(ids: number[]) {
  return requestClient.post('/mes/pro-mps/merge-issue', ids);
}

/** 取消 MPS */
export function cancelMps(id: number) {
  return requestClient.post(`/mes/pro-mps/cancel?id=${id}`);
}
