package com.cmvr.test.flow.runtime.event;

import com.cmvr.test.enums.TaskStatusEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 流程执行事件
 * <p>
 * 携带流程执行过程中的关键信息，供外部模块监听和处理
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class FlowExecutionEvent {

    /**
     * 事件类型
     */
    private EventType eventType;

    /**
     * 任务实例 ID
     */
    private String instId;

    /**
     * 任务 ID
     */
    private String taskId;

    /**
     * 节点数量
     */
    private Integer nodeCount;

    /**
     * 当前检测项 ID
     */
    private String itemId;

    /**
     * 节点 ID（节点级事件时有值）
     */
    private String nodeId;

    /**
     * 节点类型（节点级事件时有值）
     */
    private String nodeType;

    /**
     * 节点名称
     */
    private String nodeName;

    /**
     * 任务状态
     */
    private TaskStatusEnum status;

    /**
     * 错误信息（失败事件时有值）
     */
    private String errorMessage;

    /**
     * 事件类型枚举
     */
    public enum EventType {
        /** 节点执行完成 */
        NODE_COMPLETED,
        /** 节点执行失败 */
        NODE_FAILED,
        /** 任务全部执行完成 */
        TASK_COMPLETED,
        /** 任务执行失败 */
        TASK_FAILED,
        /** 任务被暂停 */
        TASK_PAUSED,
        /** 任务被终止 */
        TASK_STOPPED,
        /** 任务恢复执行 */
        TASK_RESUMED,
        /** 节点开始执行 */
        NODE_STARTED,
    }
}
