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

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

export namespace MesQcIndicatorResultApi {
  /** 平行测量批次明细（同一指标的一次测量） */
  export interface Measure {
    detailId?: number; // 明细编号
    resultId?: number; // 关联检验结果 ID
    measureNo?: number; // 测量批次号（从 1 开始）
    value?: string; // 检测值
    remark?: string; // 备注
  }

  /** MES 检验结果明细（树形：分组项下挂子项；平行测量放入 measures） */
  export interface IndicatorResultDetail {
    id?: number; // 编号（第一批明细 ID，兼容旧字段）
    resultId?: number; // 关联检验结果 ID
    indicatorId?: number; // 检测指标 ID
    value?: string; // 检测值（第一批，兼容旧字段）
    valueNumber?: number; // UI 数值绑定（提交前转字符串）
    measureNo?: number; // 测量批次号（提交用，默认 1）
    remark?: string; // 备注
    // 关联查询字段（来自 indicator）
    indicatorName?: string; // 检测指标名称
    valueType?: number; // 质检值类型
    valueSpecification?: string; // 值属性
    parentId?: number; // 父指标编号（0=顶级）
    itemType?: number; // 条目类型：1=录入项，2=分组项
    formulaText?: string; // 公式展示文本
    unitText?: string; // 单位文本
    sortOrder?: number; // 同级排序号
    measures?: Measure[]; // 平行测量批次列表（按 measureNo 升序）
    children?: IndicatorResultDetail[]; // 子项列表（分组项下挂）
  }

  /** MES 检验结果 */
  export interface IndicatorResult {
    id?: number; // 编号
    code?: string; // 样品编号
    qcId?: number; // 关联质检单 ID
    qcType?: number; // 质检类型
    itemId?: number; // 产品物料 ID
    sn?: string; // 物资 SN
    remark?: string; // 备注
    createTime?: Date; // 创建时间
    items?: IndicatorResultDetail[]; // 检验结果明细列表
  }
}

/** 查询检验结果分页 */
export function getIndicatorResultPage(
  params: PageParam & { qcId?: number; qcType?: number },
) {
  return requestClient.get<PageResult<MesQcIndicatorResultApi.IndicatorResult>>(
    '/mes/qc/indicator-result/page',
    { params },
  );
}

/** 查询检验结果明细（含检测项模板）：编辑传 id，新增不传 */
export function getIndicatorResultDetail(
  qcId: number,
  qcType: number,
  id?: number,
) {
  return requestClient.get<MesQcIndicatorResultApi.IndicatorResult>(
    '/mes/qc/indicator-result/get-detail',
    { params: { id, qcId, qcType } },
  );
}

/** 新增检验结果 */
export function createIndicatorResult(
  data: MesQcIndicatorResultApi.IndicatorResult,
) {
  return requestClient.post('/mes/qc/indicator-result/create', data);
}

/** 修改检验结果 */
export function updateIndicatorResult(
  data: MesQcIndicatorResultApi.IndicatorResult,
) {
  return requestClient.put('/mes/qc/indicator-result/update', data);
}

/** 删除检验结果 */
export function deleteIndicatorResult(id: number) {
  return requestClient.delete(`/mes/qc/indicator-result/delete?id=${id}`);
}

// ==================== 检验报告单（打印数据） ====================

export namespace MesQcReportApi {
  /** 报告测量值 */
  export interface ReportMeasure {
    measureNo?: number; // 测量批次号
    value?: string; // 检测值
    remark?: string; // 备注
  }

  /** 报告检验项（树形） */
  export interface ReportItem {
    indicatorId?: number;
    indicatorCode?: string;
    indicatorName?: string;
    parentId?: number;
    itemType?: number; // 1=录入项，2=分组项
    formulaText?: string;
    unitText?: string;
    sortOrder?: number;
    checkMethod?: string; // 检测方法
    standardValue?: string; // 标准值
    thresholdMin?: string; // 阈值下限
    thresholdMax?: string; // 阈值上限
    measures?: ReportMeasure[];
    children?: ReportItem[];
  }

  /** 检验报告单 */
  export interface QcReport {
    qcType?: number;
    docCode?: string;
    docName?: string;
    itemCode?: string;
    itemName?: string;
    itemSpecification?: string;
    batchNo?: string;
    samplingLocation?: string;
    certificateNo?: string;
    executeStandard?: string;
    samplingTime?: Date;
    batchQuantity?: number;
    checkResult?: number;
    checkResultText?: string; // 检测结果文案（后端按质检类型字典解析，用于判定结论）
    inspectorUserId?: number;
    inspectorName?: string;
    auditUserId?: number;
    auditName?: string;
    approveUserId?: number;
    approveName?: string;
    remark?: string;
    measureNos?: number[]; // 列头：测量批次号列表
    items?: ReportItem[];
  }
}

/** 查询检验报告单数据（打印用） */
export function getQcReport(qcId: number, qcType: number, resultId?: number) {
  return requestClient.get<MesQcReportApi.QcReport>('/mes/qc/indicator-result/report', {
    params: { qcId, qcType, resultId },
  });
}

/** 导出产品检验单 Word（纸质检验单版式，返回 Blob） */
export function exportProductWord(qcId: number, qcType: number, resultId?: number) {
  return requestClient.download('/mes/qc/indicator-result/export-product-word', {
    params: { qcId, qcType, resultId },
  });
}
