
// 任务步骤初始化参数
interface AgentTaskStepOptions{
    title:string
    shareData?:any
    handle?():{():Promise<any>}
}

export class AgentTaskStep{
    // 任务名称
    title:string = ""

    // 任务数据 共享数据（整个任务集共享传递的数据）
    shareData:any = {}
    // 任务数据 私有数据（当前任务私有的处理数据）
    data:any = {}

    // 父级组件：任务集组件
    // @example 当前子任务未完成，且当前任务是必须时，需要在当前任务中，终止整个程序
    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,progress:number){

    }
    onComplete(step:AgentTaskStep){

    }
    onError(step:AgentTaskStep){

    }

    /**
     * 任务初始化函数
     */
    async init(metaData:AgentTaskStepOptions){
    }
    isInit:boolean = false; // 是否初始化

    /** 
     * 任务执行函数
     * @desc 函数内必须有明确的完成、结束情形，函数内必须有进度的变化指示 progress从0.00 - 1.00
     */
    progress:number = 0;
    // get progress(){
    //     return this._progress
    // }
    // set progress(v:number){
    //     this._progress = v
    //     this.onProgress(this,this.progress)
    // }

    handle():Promise<any>|any{
        this.beforeHandle(this)





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

    /**
     * 任务错误提示
     */
    error:string = "" // 错误原因
}