import request from "/@/utils/request"

// ========== 基础CRUD接口 ==========

/**
 * 分页查询列表数据
 * @param query - 查询参数对象
 * @returns Promise<分页数据>
 */
export function fetchList(query?: Object) {
  return request({
    url: '/purchase/purchasingAccept/page',
    method: 'get',
    params: query
  })
}

/**
 * 新增数据
 * @param obj - 要新增的数据对象
 * @returns Promise<boolean> - 操作结果
 */
export function addObj(obj?: Object) {
  return request({
    url: '/purchase/purchasingAccept',
    method: 'post',
    data: obj
  })
}

/**
 * 获取详情数据
 * @param obj - 查询参数对象（包含ID等）
 * @returns Promise<数据详情>
 */
export function getObj(obj?: Object) {
  return request({
    url: '/purchase/purchasingAccept/details',
    method: 'get',
    params: obj
  })
}

/**
 * 批量删除数据
 * @param ids - 要删除的ID数组
 * @returns Promise<操作结果>
 */
export function delObjs(ids?: Object) {
  return request({
    url: '/purchase/purchasingAccept',
    method: 'delete',
    data: ids
  })
}

/**
 * 更新数据
 * @param obj - 要更新的数据对象
 * @returns Promise<操作结果>
 */
export function putObj(obj?: Object) {
  return request({
    url: '/purchase/purchasingAccept',
    method: 'put',
    data: obj
  })
}

// ========== 履约验收流程接口 ==========

/**
 * 第一步：保存履约验收公共配置，按分期次数自动生成批次
 */
export function saveCommonConfig(data: any) {
  return request({
    url: '/purchase/purchasingAccept/saveCommonConfig',
    method: 'post',
    data
  })
}

/**
 * 获取履约验收公共配置及批次列表
 */
export function getCommonConfigWithBatches(purchaseId: string) {
  return request({
    url: '/purchase/purchasingAccept/commonConfigWithBatches',
    method: 'get',
    params: { purchaseId }
  })
}

/**
 * 第二步：更新单个批次
 */
export function updateBatch(data: any) {
  return request({
    url: '/purchase/purchasingAccept/updateBatch',
    method: 'put',
    data
  })
}

/**
 * 获取验收详情（含验收内容、验收小组）
 */
export function getDetail(purchaseId: string, batch?: number) {
  return request({
    url: '/purchase/purchasingAccept/detail',
    method: 'get',
    params: { purchaseId, batch }
  })
}

/**
 * 是否允许填报方式（金额<30万）
 */
export function canFillForm(purchaseId: string) {
  return request({
    url: '/purchase/purchasingAccept/canFillForm',
    method: 'get',
    params: { purchaseId }
  })
}

/**
 * 下载履约验收模板（根据金额判断使用down/up目录）
 * @param purchaseId 采购申请ID
 * @returns Promise<Blob> - 模板文件 blob
 */
export function downloadTemplate(purchaseId: string) {
  return request({
    url: '/purchase/purchasingAccept/download-template',
    method: 'get',
    params: { purchaseId },
    responseType: 'blob'
  })
}

/**
 * 根据品目类型获取验收项配置
 */
export function getAcceptanceItems(acceptanceType: string) {
  return request({
    url: `/purchase/acceptanceItemConfig/listByType/${acceptanceType}`,
    method: 'get'
  })
}

/**
 * 导出履约验收评价表（仅填写模式可导出）
 * 单期返回 docx，exportAll=true 时返回全部期数 zip
 */
export function downloadPerformanceAcceptanceTemplate(
  purchaseId: string,
  batch?: number,
  exportAll?: boolean
) {
  const params: Record<string, any> = { purchaseId }
  if (exportAll === true) params.exportAll = true
  else if (batch != null) params.batch = batch
  return request({
    url: '/purchase/purchasingAccept/export-performance-acceptance-template',
    method: 'get',
    params,
    responseType: 'blob'
  })
}

// ========== 工具函数 ==========

/**
 * 验证字段值唯一性
 * @param rule - 验证规则对象
 * @param value - 要验证的值
 * @param callback - 验证回调函数
 * @param isEdit - 是否为编辑模式
 * 
 * @example
 * // 在表单验证规则中使用
 * fieldName: [
 *   {
 *     validator: (rule, value, callback) => {
 *       validateExist(rule, value, callback, form.id !== '');
 *     },
 *     trigger: 'blur',
 *   },
 * ]
 */
export function validateExist(rule: any, value: any, callback: any, isEdit: boolean) {
  // 编辑模式下跳过验证
  if (isEdit) {
    return callback();
  }

  // 查询是否存在相同值
  getObj({ [rule.field]: value }).then((response) => {
    const result = response.data;
    if (result !== null && result.length > 0) {
      callback(new Error('数据已经存在'));
    } else {
      callback();
    }
  });
}

