/**
 * 串行任务处理器状态枚举
 */
enum SerialHandlerStatus {
  /**
   * 离线状态
   */
  OFFLINE = 'offline',
  /**
   * 激活状态
   */
  ACTIVE = 'active',
  /**
   * 待执行状态
   */
  PENDING = 'pending',
  /**
   * 执行中状态
   */
  EXECUTING = 'executing',
  /**
   * 完成状态
   */
  COMPLETED = 'completed',
  /**
   * 销毁状态
   */
  FINISH = 'finish',
}

/**
 * 并行任务处理器状态枚举
 */
enum ParallelHandlerStatus {
  /**
   * 离线状态
   */
  OFFLINE = 'offline',
  /**
   * 激活状态
   */
  ACTIVE = 'active',
  /**
   * 待执行状态
   */
  PENDING = 'pending',
  /**
    /**
   * 执行中状态
   */
  EXECUTING = 'executing',
  /**
   * 完成状态
   */
  COMPLETED = 'completed',
  /**
   * 销毁状态
   */
  FINISH = 'finish',
}

/**
 * 工厂的处理上下文
 */
interface TaskExecuteContext {
  /**
   * 是否为第一次执行
   */
  isFirstExecute?: boolean
  /**
   * 是否为最后一次执行
   */
  isLastExecute?: boolean
}

/**
 * 串行任务的处理上下文
 */
interface SerialTaskExecuteContext<O, _> extends TaskExecuteContext {
  taskItem: SerialTaskItem<O>
}

/**
 * 并行任务的处理上下文
 */
interface ParallelTaskExecuteContext<O, _> extends TaskExecuteContext {
  taskItem: ParallelTaskItem<O>
}

/**
 *  并行任务状态
 */
enum ParallelTaskItemStatus {
  /**
   * 待执行
   */
  PENDING = 'pending',
  /**
   * 执行中
   */
  EXECUTING = 'executing',
  /**
   * 执行完成
   */
  COMPLETED = 'completed',
}

/**
 *  串行任务状态
 */
enum SerialTaskItemStatus {
  /**
   * 待执行
   */
  PENDING = 'pending',
  /**
   * 执行中
   */
  EXECUTING = 'executing',
  /**
   * 执行完成
   */
  COMPLETED = 'completed',
}

/**
 * 并行每一项任务数据
 */
interface ParallelTaskItem<O> {
  uuid: string
  status: ParallelTaskItemStatus
  original: O | null
}

/**
 *  串行每一项任务数据
 */
interface SerialTaskItem<O> {
  uuid: string
  status: SerialTaskItemStatus
  original: O | null
}

export type {
  ParallelTaskExecuteContext,
  ParallelTaskItem,
  SerialTaskExecuteContext,
  SerialTaskItem,
  TaskExecuteContext,
}

export { ParallelHandlerStatus, ParallelTaskItemStatus, SerialHandlerStatus, SerialTaskItemStatus }
