interface AgentTaskStepOptions {
  title: string;
  shareData?: any;
  handle?(): { (): Promise<any> };
}

export class AgentTaskStep {
  // 任务标题
  title: string = '';
  // 共享数据
  shareData: any = {};
  // 私有数据
  data: any = {};

  /**
   * 任务初始化函数
   * 因为构造器里不能执行异步函数，而metaData里传进来的数据中可能有需要异步处理的函数
   */
  isInit: boolean = false;
  async init(metaData: AgentTaskStepOptions) {}

  // 父级组件
  parentComp: any | undefined;
  parentIndex: number | undefined;

  /**
   * 任务生命周期
   * constructor()  // 构造时执行一次
   * onInit()  // 初始化后执行一次
   * onProgress() // 进度变化时执行一次
   * onComplete() // 完成前执行一次
   */

  constructor(metaData: AgentTaskStepOptions) {
    this.title = metaData.title;
    this.shareData = metaData?.shareData;
    if (metaData.handle) {
      this.handle = metaData.handle;
    }
    this.init(metaData); // 处理异步函数
  }
  onInit(step: AgentTaskStep) {
    this.isInit = true;
  }
  beforeHandle(step: AgentTaskStep) {}
  afterhandle(step: AgentTaskStep) {}
  onProgress(step: AgentTaskStep) {}
  onComplete(step: AgentTaskStep) {}
  onError(step: AgentTaskStep) {}

  /**
   * 执行任务
   * @desc 函数内必须有明确的完成、结束情形和函数进度变化指示
   */
  progress: number = 0;
  handle(): Promise<any> | any {
    this.beforeHandle(this);

    this.onComplete(this);
    this.onError(this);
    return true;
  }

  /**
   * 函数报错
   */
  error: string = ''; // 报错原因
}
