package tech.easyflow.ai.easyagentsflow.support;

import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.DigestUtil;

/**
 * 工作流节点执行步骤键转换工具。
 */
public final class WorkflowExecutionStepKey {

    private static final String LEGACY_PREFIX =
            "easyflow-legacy-exec-key:";

    private WorkflowExecutionStepKey() {
    }

    /**
     * 将旧快照中的最终执行键编码为可随节点生命周期传递的兼容键。
     *
     * @param execKey 旧版最终执行键
     * @return 兼容键；输入为空时为 {@code null}
     */
    public static String encodeLegacy(String execKey) {
        return StrUtil.isBlank(execKey)
                ? null
                : LEGACY_PREFIX + execKey;
    }

    /**
     * 将节点业务尝试键转换为最终执行步骤键。
     *
     * @param executionAttemptKey 业务尝试键或旧版兼容键
     * @return 最终执行步骤键；输入为空时为 {@code null}
     */
    public static String resolve(String executionAttemptKey) {
        if (StrUtil.isBlank(executionAttemptKey)) {
            return null;
        }
        if (executionAttemptKey.startsWith(
                LEGACY_PREFIX)) {
            return executionAttemptKey.substring(
                    LEGACY_PREFIX.length());
        }
        return DigestUtil.sha256Hex(
                executionAttemptKey);
    }
}
