package tech.easyflow.publicapi.dto;

import java.io.Serializable;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * 工作流 Public API 执行状态。
 *
 * @param executeId 执行 ID
 * @param status 可读工作流状态
 * @param terminal 是否已经进入终态
 * @param message 安全错误消息
 * @param result 工作流执行结果
 * @param nodes 节点 ID 到节点状态的映射
 * @param error 安全错误对象
 */
public record PublicWorkflowChainStatus(
        String executeId,
        PublicWorkflowExecutionStatus status,
        boolean terminal,
        String message,
        Map<String, Object> result,
        Map<String, PublicWorkflowNodeStatus> nodes,
        PublicWorkflowStatusError error) implements Serializable {

    /**
     * 创建不可变公共执行状态。
     */
    public PublicWorkflowChainStatus {
        nodes = nodes == null
                ? Map.of()
                : Collections.unmodifiableMap(
                new LinkedHashMap<>(nodes));
    }
}
