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

export interface StabilityBatchKey {
  jihua_id: string;
  pihao: string;
}

export interface StabilityAnalysisQuery {
  fenlei_bianma: string;
  jihua_ids: string[];
  pihao_keys: StabilityBatchKey[];
  xiangmu_ids: string[];
  yangpin_id: string;
}

export interface StabilityOptionBase {
  code?: string;
  id: string;
  key: string;
  name: string;
}

export type StabilityCategoryOption = StabilityOptionBase;

export interface StabilityProductOption extends StabilityOptionBase {
  guige?: string;
}

export interface StabilityItemOption extends StabilityOptionBase {
  shuju_leixing?: string;
  unit?: string;
}

export type StabilityPlanOption = StabilityOptionBase;

export interface StabilityBatchOption extends StabilityOptionBase {
  fangan_mingcheng?: string;
  jihua_bianhao: string;
  jihua_id: string;
  pihao: string;
}

export interface StabilityAnalysisOptions {
  fenlei_list: StabilityCategoryOption[];
  jihua_list: StabilityPlanOption[];
  pihao_list: StabilityBatchOption[];
  xiangmu_list: StabilityItemOption[];
  yangpin_list: StabilityProductOption[];
}

export type StabilityExceptionType = '' | 'ad' | 'non_compliant' | 'oos' | 'oot' | 'out_of_limit';

export interface StabilityAnalysisRow {
  batch_key: string;
  biaozhun_id: string;
  exception_type: StabilityExceptionType;
  jieguo_luru_riqi: string;
  jihua_bianhao: string;
  jihua_id: string;
  numeric_result: null | number;
  pihao: string;
  raw_result: string;
  shangxian: string;
  shangxian_value: null | number;
  shuju_leixing: string;
  unit: string;
  xiaxian: string;
  xiaxian_value: null | number;
  xiangmu_bianma: string;
  xiangmu_id: string;
  xiangmu_mingcheng: string;
  yangpin_mingcheng: string;
  zhouqi: string;
  zhouqi_danwei: string;
  zhouqi_order: number;
}

export interface StabilityCompleteness {
  audited_count: number;
  expected_count: number;
  missing_count: number;
  pending_count: number;
}

export interface StabilityExpectedPeriod {
  xiangmu_id: string;
  zhouqi: string;
  zhouqi_danwei: string;
  zhouqi_order: number;
}

export interface StabilityAnalysisData {
  completeness: StabilityCompleteness;
  expected_periods: StabilityExpectedPeriod[];
  rows: StabilityAnalysisRow[];
}

enum Api {
  Data = '/api/extend/lims/biz/wendingxing/fenxi/data',
  Options = '/api/extend/lims/biz/wendingxing/fenxi/options',
}

export function getStabilityAnalysisOptions(data: Partial<StabilityAnalysisQuery>) {
  return defHttp.post<{ data: StabilityAnalysisOptions }>({ data, url: Api.Options });
}

export function getStabilityAnalysisData(data: StabilityAnalysisQuery) {
  return defHttp.post<{ data: StabilityAnalysisData }>({ data, url: Api.Data });
}
