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

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

export namespace ErpPurchaseOrderApi {
  /** 采购订单信息 */
  export interface PurchaseOrder {
    id?: number; // 订单工单编号
    no?: string; // 采购订单号
    supplierId?: number; // 供应商编号
    supplierName?: string; // 供应商名称
    orderTime?: Date | string; // 订单时间
    totalCount?: number; // 合计数量
    totalPrice?: number; // 合计金额，单位：元
    totalProductPrice?: number; // 产品金额，单位：元
    discountPercent?: number; // 优惠率，百分比
    discountPrice?: number; // 优惠金额，单位：元
    depositPrice?: number; // 定金金额，单位：元
    accountId?: number; // 结算账户编号
    status?: number; // 状态
    remark?: string; // 备注
    attachmentList?: { id: number; name?: string; url?: string }[]; // 附件列表
    inCount?: number; // 采购入库数量
    count?: number; // 数量
    returnCount?: number; // 采购退货数量
    inStatus?: number; // 入库状态
    returnStatus?: number; // 退货状态
    productNames?: string; // 产品名称列表
    creatorName?: string; // 创建人名称
    createTime?: Date; // 创建时间
    reviewerId?: number; // 审核人编号
    reviewerName?: string; // 审核人姓名
    reviewTime?: Date | string; // 审核时间
    reviewRemark?: string; // 审核意见（不通过时为驳回原因）
    items?: PurchaseOrderItem[]; // 订单项列表
  }

  /** 采购订单项信息 */
  export interface PurchaseOrderItem {
    id?: number; // 订单项编号
    seq?: number; // 前端行号
    orderId?: number; // 采购订单编号
    productId?: number; // 产品编号
    productName?: string; // 产品名称
    productBarCode?: string; // 产品条码
    productUnitId?: number; // 产品单位编号
    productUnitName?: string; // 产品单位名称
    productPrice?: number; // 产品单价，单位：元
    totalProductPrice?: number; // 产品总价，单位：元
    count?: number; // 数量
    totalPrice?: number; // 总价，单位：元
    taxPercent?: number; // 税率，百分比
    taxPrice?: number; // 税额，单位：元
    totalTaxPrice?: number; // 含税总价，单位：元
    remark?: string; // 备注
    stockCount?: number; // 库存数量（显示字段）
    qcCheckFlag?: boolean; // 是否需要来料检验
  }
}

/** 查询采购订单分页 */
export function getPurchaseOrderPage(params: PageParam) {
  return requestClient.get<PageResult<ErpPurchaseOrderApi.PurchaseOrder>>(
    '/purchase/order/page',
    { params },
  );
}

/** 查询采购订单详情 */
export function getPurchaseOrder(id: number) {
  return requestClient.get<ErpPurchaseOrderApi.PurchaseOrder>(
    `/purchase/order/get?id=${id}`,
  );
}

/** 新增采购订单 */
export function createPurchaseOrder(data: ErpPurchaseOrderApi.PurchaseOrder) {
  return requestClient.post('/purchase/order/create', data);
}

/** 修改采购订单 */
export function updatePurchaseOrder(data: ErpPurchaseOrderApi.PurchaseOrder) {
  return requestClient.put('/purchase/order/update', data);
}

/** 更新采购订单的状态 */
export function updatePurchaseOrderStatus(id: number, status: number) {
  return requestClient.put('/purchase/order/update-status', null, {
    params: { id, status },
  });
}

/** 删除采购订单 */
export function deletePurchaseOrder(ids: number[]) {
  return requestClient.delete('/purchase/order/delete', {
    params: { ids: ids.join(',') },
  });
}

/** 导出采购订单 Excel */
export function exportPurchaseOrder(params: any) {
  return requestClient.download('/purchase/order/export-excel', { params });
}

/**
 * 提交采购订单审批（未提交/审核不通过 → 审批中）
 *
 * 改为轻量级状态机审批后，后端按审批配置校验审批人，前端无需再选择 BPM 流程。
 */
export function submitPurchaseOrder(id: number) {
  return requestClient.put('/purchase/order/submit', null, {
    params: { id },
  });
}

/**
 * 审核采购订单（审批中 → 审核通过/审核不通过）
 *
 * 仅审批配置中指定的审批人本人可调用；pass=false 时 reviewRemark（不通过原因）必填。
 */
export function auditPurchaseOrder(
  id: number,
  pass: boolean,
  reviewRemark?: string,
) {
  return requestClient.put('/purchase/order/audit', {
    id,
    pass,
    reviewRemark,
  });
}

/** 获取采购订单的审批人编号集合，供前端判断是否展示审核按钮 */
export function getPurchaseOrderApproverUserIds() {
  return requestClient.get<number[]>('/purchase/order/approver-ids');
}

/** 确认收货 */
export function confirmReceipt(id: number) {
  return requestClient.post<number>('/purchase/order/confirm-receipt', null, {
    params: { id },
  });
}
