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

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

export namespace MesTraceCrossRegionApi {
  /** 窜货预警 */
  export interface Warning {
    id?: number; // 编号
    warningNo?: string; // 预警编号
    bagCodeId?: number; // 袋码编号
    bagCode?: string; // 袋码
    palletCodeId?: number; // 托盘码编号
    palletCode?: string; // 托盘码
    batchId?: number; // 生产批次编号
    batchCode?: string; // 批次号
    itemId?: number; // 物料编号
    itemCode?: string; // 物料编码
    itemName?: string; // 物料名称
    salesId?: number; // 销售出库单编号
    salesCode?: string; // 出库单号
    clientId?: number; // 经销商编号
    clientName?: string; // 经销商名称
    dealerProvince?: string; // 经销商省份
    dealerCity?: string; // 经销商城市
    scanProvince?: string; // 扫码省份
    scanCity?: string; // 扫码城市
    warningType?: string; // 预警类型：CROSS_PROVINCE / CROSS_CITY
    warningTypeName?: string; // 预警类型名称
    scanEventId?: number; // 关联消费者扫码事件编号
    status?: number; // 状态：10 待处理 / 20 已处理 / 30 误报
    statusName?: string; // 状态名称
    handleUserId?: number; // 处理人编号
    handleUserName?: string; // 处理人姓名
    handleTime?: string; // 处理时间
    handleRemark?: string; // 处理备注
    eventTime?: string; // 预警产生时间
  }

  /** 窜货预警分页查询参数 */
  export interface PageParams extends PageParam {
    status?: number;
    warningType?: string;
    batchCode?: string;
    bagCode?: string;
    clientName?: string;
    eventTime?: string[];
  }

  /** 窜货预警汇总 */
  export interface Summary {
    [key: string]: number | undefined; // 汇总指标（按字段名取值）
    total?: number; // 预警总数
    pending?: number; // 待处理数量
    handled?: number; // 已处理数量
    falseAlarm?: number; // 误报数量
    crossProvince?: number; // 跨省窜货数量
    crossCity?: number; // 跨市窜货数量
  }

  /** 窜货预警分布统计项 */
  export interface StatisticsItem {
    name?: string; // 分组名称
    count?: number; // 预警数量
  }

  /** 防窜货规则配置 */
  export interface AntiConfig {
    warningLevel?: string; // 判定粒度：PROVINCE 跨省 / CITY 跨市
    remark?: string; // 配置说明
  }
}

/** 获得窜货预警分页 */
export function getTraceCrossRegionPage(
  params: MesTraceCrossRegionApi.PageParams,
) {
  return requestClient.get<PageResult<MesTraceCrossRegionApi.Warning>>(
    '/mes/trace-cross-region/page',
    { params },
  );
}

/** 处理窜货预警 */
export function handleTraceCrossRegion(data: {
  id: number;
  status: number;
  handleRemark?: string;
}) {
  return requestClient.put('/mes/trace-cross-region/handle', data);
}

/** 获得窜货预警汇总 */
export function getTraceCrossRegionSummary(startTime?: string, endTime?: string) {
  return requestClient.get<MesTraceCrossRegionApi.Summary>(
    '/mes/trace-cross-region/summary',
    { params: { startTime, endTime } },
  );
}

/** 获得窜货预警分布统计 */
export function getTraceCrossRegionStatistics(
  groupBy: string,
  startTime?: string,
  endTime?: string,
) {
  return requestClient.get<MesTraceCrossRegionApi.StatisticsItem[]>(
    '/mes/trace-cross-region/statistics',
    { params: { groupBy, startTime, endTime } },
  );
}

/** 获得防窜货规则配置 */
export function getTraceCrossRegionConfig() {
  return requestClient.get<MesTraceCrossRegionApi.AntiConfig>(
    '/mes/trace-cross-region/config',
  );
}

/** 更新防窜货规则配置 */
export function updateTraceCrossRegionConfig(warningLevel: string) {
  return requestClient.put(
    `/mes/trace-cross-region/config?warningLevel=${warningLevel}`,
  );
}
