package tech.easyflow.ai.permission;

import cn.dev33.satoken.stp.StpUtil;
import org.springframework.stereotype.Component;
import tech.easyflow.common.web.exceptions.BusinessException;

/**
 * MCP 查询与使用权限检查器。
 *
 * <p>MCP 当前没有独立的资源级 {@code USE} 权限，平台沿用 MCP 管理模块已有的
 * {@code /api/v1/mcp/query} 权限作为查看、选择和使用 MCP 的授权边界。</p>
 */
@Component
public class McpAccessPermissionChecker {

    /** MCP 模块现有查询权限码。 */
    public static final String MCP_QUERY_PERMISSION = "/api/v1/mcp/query";

    /**
     * 判断当前登录用户是否可以查询和使用 MCP。
     *
     * @return 已登录且拥有 MCP 查询权限时返回 {@code true}
     */
    public boolean canUseMcp() {
        return StpUtil.isLogin() && StpUtil.hasPermission(MCP_QUERY_PERMISSION);
    }

    /**
     * 校验当前登录用户是否可以查询和使用 MCP。
     *
     * @throws BusinessException 未登录或缺少 MCP 查询权限时抛出
     */
    public void assertCanUseMcp() {
        if (!StpUtil.isLogin()) {
            throw new BusinessException(401, 401, "未登录或登录态无效");
        }
        if (!StpUtil.hasPermission(MCP_QUERY_PERMISSION)) {
            throw new BusinessException(403, 403, "无权限查询或使用 MCP");
        }
    }
}
