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

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

export namespace MesWmStockWarningApi {
  /** MES 库存预警记录 */
  export interface StockWarning {
    id?: number; // 编号
    itemId?: number; // 品种ID
    itemCode?: string; // 品种编码
    itemName?: string; // 品种名称
    batchId?: number; // 批次ID
    batchCode?: string; // 批次号
    warehouseId?: number; // 仓库ID
    warehouseName?: string; // 仓库名称
    warningType?: number; // 预警类型：10-低库存，20-临期，30-库龄
    warningTypeName?: string; // 预警类型名称
    thresholdValue?: number; // 阈值（低库存=最低库存，临期=剩余天数，库龄=超龄天数）
    currentValue?: number; // 当前值（低库存=在库数量，临期=剩余天数，库龄=库龄天数）
    expireDate?: string; // 过期日期（临期预警才有）
    receiptTime?: string; // 入库时间（库龄预警才有）
    status?: number; // 处理状态：10-未处理，20-已处理
    statusName?: string; // 处理状态名称
    handleUserId?: number; // 处理人ID
    handleTime?: string; // 处理时间
    handleRemark?: string; // 处理备注
  }

  /** 库存预警分页查询参数 */
  export interface StockWarningPageParams extends PageParam {
    itemCode?: string; // 品种编码模糊查询
    batchCode?: string; // 批次号模糊查询
    warningType?: number; // 预警类型
    status?: number; // 处理状态
  }
}

/** 查询库存预警分页（落库记录） */
export function getStockWarningPage(params: MesWmStockWarningApi.StockWarningPageParams) {
  return requestClient.get<PageResult<MesWmStockWarningApi.StockWarning>>(
    '/mes/wm/stock-warning/page',
    { params },
  );
}

/** 实时计算当前库存预警（不落库） */
export function getCurrentStockWarnings() {
  return requestClient.get<MesWmStockWarningApi.StockWarning[]>(
    '/mes/wm/stock-warning/current',
  );
}

/** 重新计算并落库当前库存预警 */
export function refreshStockWarnings() {
  return requestClient.post<number>('/mes/wm/stock-warning/refresh');
}

/** 处理库存预警（标记已处理） */
export function handleStockWarning(data: { id: number; handleRemark?: string }) {
  return requestClient.put<boolean>('/mes/wm/stock-warning/handle', data);
}
