package com.easyagents.agent.runtime.hitl;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * 单次工具调用的动态审批判定。
 *
 * @param valid 调用是否通过审批前静态校验
 * @param approvalRequired 是否需要人工审批
 * @param forced 是否禁止复用既有审批
 * @param reusableScope 可复用审批作用域；为空表示逐调用审批
 * @param metadata 写入审批事件的受信任元数据
 */
public record AgentToolApprovalEvaluation(
        boolean valid,
        boolean approvalRequired,
        boolean forced,
        String reusableScope,
        Map<String, Object> metadata) {

    /**
     * 创建审批前静态校验失败的判定。
     *
     * @return 无需弹出审批的无效判定
     */
    public static AgentToolApprovalEvaluation invalid() {
        return new AgentToolApprovalEvaluation(false, false, false, null, Map.of());
    }

    /**
     * 创建通过静态校验的判定。
     *
     * @param approvalRequired 是否需要审批
     * @param forced 是否强制逐调用审批
     * @param reusableScope 可复用作用域
     * @return 动态审批判定
     */
    public static AgentToolApprovalEvaluation valid(boolean approvalRequired,
                                                    boolean forced,
                                                    String reusableScope) {
        Map<String, Object> metadata = new LinkedHashMap<>();
        if (reusableScope != null && !reusableScope.isBlank()) {
            metadata.put("approvalScope", reusableScope);
        }
        return new AgentToolApprovalEvaluation(
                true, approvalRequired, forced, reusableScope, Map.copyOf(metadata));
    }
}
