import { http } from '@/utils/http/axios';
import type { QueryPageRequest, QueryPageResponse } from '@/types/basic-query';
import type { InventoryItem } from '@/api/inventory';

/**
 * 物品领取记录返回对象
 */
export interface ReceiptRecordItem {
  id: number;
  pimId: number; // 物品库存ID
  stuffName: string; // 物品名称
  outStoreTime: string; // 出库日期
  claimQty: number; // 领取数量
  surplusQty: number; // 结余数量
  orderNumber: string; // 单号
  deptName: string; // 部门名称
  userName: string; // 领取人
  remark: string; // 备注
  status?: number; // 0 待审核, 1 审核通过, -1 审核不通过, 2 已领取
  createdUserName: string; // 创建人
  createdAt: string; // 创建时间
  updatedAt: string; // 更新时间
  isDeleted: number; // 0-未删除，大于0(时间戳)-已删除
  templateId?: number; // 审批流程模板ID（可选，后端字段为 templateId）
  approvalOrder?: number; // 审批顺序（管理员审核页使用）
  rejectReson?: string; // 审核不通过原因（后端字段为 rejectReson）
  conformClaimButton?: number; // 确认发放按钮
}

/**
 * 物品领取记录查询参数
 */
export interface ReceiptRecordQueryParam {
  stuffName?: string; // 物品名称
  deptName?: string; // 部门名称
  status?: number; // 0 待审核, 1 审核通过, -1 审核不通过, 2 已领取
}

/**
 * 查询物品领取记录列表
 */
export function queryClaimItemsLogs(query: QueryPageRequest<ReceiptRecordQueryParam>) {
  return http.request<QueryPageResponse<ReceiptRecordItem>>({
    url: '/claimItemsLog/queryClaimItemsLogs',
    method: 'post',
    data: query,
  });
}
/**
 * 查询物品领取记录审批列表
 */
export function queryClaimItemsApprovalPage(query: QueryPageRequest<ReceiptRecordQueryParam>) {
  return http.request<QueryPageResponse<ReceiptRecordItem>>({
    url: '/claimItemsLog/queryClaimItemsApprovalPage',
    method: 'post',
    data: query,
  });
}

/**
 * 保存物品领取记录请求参数
 */
export interface SaveClaimItemsLogRequest {
  stuffName: string; // 物品名称
  pimId: number; // 物品库存ID
  outStoreTime: string; // 出库日期 (ISO 格式)
  claimQty: number; // 领取数量
  orderNumber: string; // 单号
  deptName: string; // 部门名称
  deptId?: number; // 部门ID
  userName: string; // 领取人
  userId?: number; // 领取人ID
  remark: string; // 备注
  templateId?: number; // 审批流程模板ID（后端字段为 templateId）
}

/**
 * 保存物品领取记录（新增）
 */
export function saveClaimItemsLog(data: SaveClaimItemsLogRequest) {
  return http.request({
    url: '/claimItemsLog/saveClaimItemsLog',
    method: 'post',
    data,
  });
}

/**
 * 更新物品领取记录请求参数
 */
export interface UpdateClaimItemsLogRequest extends SaveClaimItemsLogRequest {
  id: number; // 记录ID
}

/**
 * 物品领取记录审批流程提交参数
 * 参考应急预案审批流程参数结构
 */
export interface ReceiptRecordApprovalProcessParam {
  claimItemsLogId: number; // 物品领取记录ID
  approvalDescription: string; // 审批说明
  approvalInfoList: {
    approvalOrder: number; // 审批顺序
    approverIdList: number[]; // 当前节点审批人ID列表
  }[];
}

/**
 * 提交物品领取记录审批流程
 * （需要后端提供对应接口：/claimItemsLog/saveApprovalProcess）
 */
export function submitReceiptRecordApprovalProcess(data: ReceiptRecordApprovalProcessParam) {
  return http.request({
    url: '/claimItemsLog/saveApprovalProcess',
    method: 'post',
    data,
  });
}

/**
 * 物品领取记录单条审核入参
 * 复用预案审批的审批入参结构
 */
export interface ReceiptRecordApprovalParam {
  planId: number; // 预案id，这里复用为物品领取记录ID
  approvalOrder: number; // 审批顺序
  approvalStatus: number; // 审批状态: 1-待审批，2-已审批，3-退回
  returnReason?: string; // 退回原因（请求字段为 returnReason）
}

/**
 * 物品领取记录单条审核
 * 接口：/claimItemsLog/saveApproval
 */
export function submitReceiptRecordApproval(data: ReceiptRecordApprovalParam) {
  return http.request({
    url: '/claimItemsLog/saveApproval',
    method: 'post',
    data,
  });
}

/**
 * 更新物品领取记录（编辑）
 */
export function updateClaimItemsLog(data: UpdateClaimItemsLogRequest) {
  return http.request({
    url: '/claimItemsLog/updateClaimItemsLog',
    method: 'put',
    data,
  });
}

/**
 * 删除物品领取记录
 */
export function deleteClaimItemsLog(id: number) {
  return http.request({
    url: `/claimItemsLog/deleteClaimItemsLog?id=${id}`,
    method: 'delete',
  });
}

/**
 * 查询物品领取记录详情
 */
export function queryClaimItemsLogDetail(id: number) {
  return http.request<ReceiptRecordItem>({
    url: `/claimItemsLog/queryClaimItemsLogDetail?id=${id}`,
    method: 'get',
  });
}

/**
 * 导出物品领取记录请求参数
 */
export interface ExportClaimItemsLogRequest {
  stuffName?: string; // 物品名称
  deptName?: string; // 部门名称
}

/**
 * 导出物品领取记录
 */
export function exportClaimItemsLog(query: ExportClaimItemsLogRequest) {
  return http.request({
    url: '/claimItemsLog/exportClaimItemsLog',
    method: 'post',
    data: query,
    responseType: 'blob',
  }, {
    isTransformResponse: false,
  });
}

/**
 * 同意审核
 * @param id 记录ID
 */
export function updateClaimItemsLogAgree(id: number) {
  return http.request({
    url: `/claimItemsLog/updateClaimItemsLogAgree?id=${id}`,
    method: 'put',
    // data: { id },
  });
}

/**
 * 拒绝审核
 * @param id 记录ID
 */
export function updateClaimItemsLogReject(id: number) {
  return http.request({
    url: `/claimItemsLog/updateClaimItemsLogReject?id=${id}`,
    method: 'put',
  });
}

/**
 * 查询物品库存管理列表（用于下拉框）
 */
export function querInventoryManageList() {
  return http.request<InventoryItem[]>({
    url: '/claimItemsLog/querInventoryManageList',
    method: 'get',
  });
}

/**
 * 确认领取
 * 接口：/claimItemsLog/updateConfirm
 * 方法：post
 * 入参：{ id }
 */
export function updateClaimItemsLogConfirm(id: number) {
  return http.request({
    url: `/claimItemsLog/updateConfirm?id=${id}`,
    method: 'put',
  });
}
