import { type ParameterInputObject } from '@/components/ResourceSelect';
import { AutoMLTaskType } from '@/enums';
import { HyperParameterFile } from '@/pages/HyperParameter/types';
import { type NodeStatus } from '@/types';

// 操作类型
export enum OperationType {
  Create = 'Create', // 创建
  Update = 'Update', // 更新
}

// 表单数据
export type FormData = {
  name: string; // 实验名称
  description: string; // 实验描述
  task_type: AutoMLTaskType; // 任务类型
  framework_type: string; // 框架类型
  code_config: ParameterInputObject; // 代码配置
  model?: ParameterInputObject; // 模型
  model_py?: string; // 模型文件路径
  model_class_name?: string; // 模型类名称
  loss_py?: string; // loss文件路径
  loss_class_name?: string; // loss类名
  classifier_alg?: string; // 分类算法
  regressor_alg?: string; // 回归算法
  dataset: ParameterInputObject; // 数据集
  dataset_py: string; // dataset处理文件路径
  dataset_class_name: string; // dataset类名
  data_size: number; // 数据量
  train_size: number; // 训练集数据量
  initial_num: number; // 初始训练数据量
  queries_num: number; // 查询次数
  instances_num: number; // 每次查询数据量
  computing_resource_id: number; // 资源规格
  image: ParameterInputObject; // 镜像
  shuffle: boolean; // 是否随机打乱
  query_strategy: string; // 查询策略
  checkpoint_num: number; // 多少轮查询保存一次模型参数
  batch_size: number; // batch_size
  epochs: number; // epochs
  lr: number; // 学习率
};

// 主动学习
export type ActiveLearnData = {
  id: number;
  progress: number;
  run_state: string;
  state: number;
  create_by?: string;
  create_time?: string;
  update_by?: string;
  update_time?: string;
  status_list: string; // 最近五次运行状态
  experiment_ins_id: string;
} & FormData;

// 主动学习实验实例
export type ActiveLearnInstanceData = {
  id: number;
  auto_ml_id: number;
  result_path: string;
  model_path: string;
  img_path: string;
  run_history_path: string;
  state: number;
  status: string;
  node_status: string;
  node_result: string;
  param: string;
  source: string | null;
  argo_ins_name: string;
  argo_ins_ns: string;
  create_time: string;
  update_time: string;
  finish_time: string;
  nodeStatus?: NodeStatus;
  data: string;
  trial_list?: ActiveLearnTrial[];
};

export type ActiveLearnTrial = {
  trial_id: string;
  n_instances?: number;
  data_num?: number;
  accuracy?: number;
  mse?: number;
  query_idx?: string;
  file?: HyperParameterFile;
};

export { type HyperParameterFile };
