package tech.easyflow.ai.easyagentsflow.event;

import tech.easyflow.ai.entity.WorkflowExecResult;
import tech.easyflow.ai.entity.WorkflowExecStep;

import java.io.Serializable;
import java.util.Date;

/**
 * 工作流执行记录异步持久化事件。
 */
public class WorkflowExecutionAuditEvent implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 审计事件类型。
     */
    public enum Type {
        CHAIN_STARTED,
        CHAIN_ENDED,
        NODE_STARTED,
        NODE_ENDED
    }

    /**
     * 事件幂等 ID。
     */
    private String eventId;
    /**
     * 工作流实例 ID，同时作为同实例事件顺序键。
     */
    private String instanceId;
    /**
     * 事件类型。
     */
    private Type type;
    /**
     * 事件发生时间。
     */
    private Date occurredAt;
    /**
     * 工作流执行记录快照。
     */
    private WorkflowExecResult result;
    /**
     * 节点执行步骤快照。
     */
    private WorkflowExecStep step;

    /**
     * 获取事件幂等 ID。
     *
     * @return 事件幂等 ID
     */
    public String getEventId() {
        return eventId;
    }

    /**
     * 设置事件幂等 ID。
     *
     * @param eventId 事件幂等 ID
     */
    public void setEventId(String eventId) {
        this.eventId = eventId;
    }

    /**
     * 获取工作流实例 ID。
     *
     * @return 工作流实例 ID
     */
    public String getInstanceId() {
        return instanceId;
    }

    /**
     * 设置工作流实例 ID。
     *
     * @param instanceId 工作流实例 ID
     */
    public void setInstanceId(String instanceId) {
        this.instanceId = instanceId;
    }

    /**
     * 获取事件类型。
     *
     * @return 事件类型
     */
    public Type getType() {
        return type;
    }

    /**
     * 设置事件类型。
     *
     * @param type 事件类型
     */
    public void setType(Type type) {
        this.type = type;
    }

    /**
     * 获取事件发生时间。
     *
     * @return 事件发生时间
     */
    public Date getOccurredAt() {
        return occurredAt;
    }

    /**
     * 设置事件发生时间。
     *
     * @param occurredAt 事件发生时间
     */
    public void setOccurredAt(Date occurredAt) {
        this.occurredAt = occurredAt;
    }

    /**
     * 获取工作流执行记录快照。
     *
     * @return 工作流执行记录快照
     */
    public WorkflowExecResult getResult() {
        return result;
    }

    /**
     * 设置工作流执行记录快照。
     *
     * @param result 工作流执行记录快照
     */
    public void setResult(WorkflowExecResult result) {
        this.result = result;
    }

    /**
     * 获取节点执行步骤快照。
     *
     * @return 节点执行步骤快照
     */
    public WorkflowExecStep getStep() {
        return step;
    }

    /**
     * 设置节点执行步骤快照。
     *
     * @param step 节点执行步骤快照
     */
    public void setStep(WorkflowExecStep step) {
        this.step = step;
    }
}
