package tech.easyflow.agent.vo;

import java.math.BigInteger;
import java.util.List;

/**
 * Agent 设计器依赖资源的安全选择项集合。
 *
 * @param models 模型选项
 * @param knowledges 知识库选项
 * @param skills Skill 选项
 * @param workflows 工作流选项
 * @param pluginTools 插件工具选项
 * @param mcps MCP 选项
 * @param capabilities 当前账号的 Agent 设计能力
 */
public record AgentResourceOptionsView(
        List<ModelOption> models,
        List<ResourceOption> knowledges,
        List<SkillOption> skills,
        List<ResourceOption> workflows,
        List<PluginToolOption> pluginTools,
        List<McpOption> mcps,
        Capabilities capabilities
) {

    /**
     * Agent 设计器的服务端权限能力。
     *
     * @param canDisableShellApproval 是否允许关闭 Shell 调用前审批
     */
    public record Capabilities(boolean canDisableShellApproval) {
    }

    /**
     * 已发布 Skill 安全选择项。
     *
     * @param id Skill ID
     * @param displayName 展示名称
     * @param description 用途描述
     * @param visibilityScope 使用范围
     * @param snapshotHash 发布组合快照 hash
     * @param toolCount 冻结 Tool 数量
     * @param textBytes Skill 文本投影 UTF-8 字节数
     * @param textResourceCount 文本资源数量
     * @param binaryResourceCount 二进制资源数量
     */
    public record SkillOption(
            BigInteger id,
            String displayName,
            String description,
            String visibilityScope,
            String snapshotHash,
            int toolCount,
            long textBytes,
            int textResourceCount,
            int binaryResourceCount
    ) {
    }

    /**
     * 模型安全选择项。
     *
     * @param id 模型 ID
     * @param title 展示名称
     * @param contextWindowTokens 上下文窗口
     * @param maxOutputTokens 最大输出 Token
     */
    public record ModelOption(
            BigInteger id,
            String title,
            Long contextWindowTokens,
            Long maxOutputTokens
    ) {
    }

    /**
     * 通用可发布资源选择项。
     *
     * @param id 资源 ID
     * @param title 标题
     * @param description 描述
     * @param englishName 英文运行名
     */
    public record ResourceOption(
            BigInteger id,
            String title,
            String description,
            String englishName
    ) {
    }

    /**
     * 插件工具安全选择项。
     *
     * @param id 插件工具 ID
     * @param name 工具名称
     * @param description 工具描述
     * @param englishName 英文运行名
     * @param pluginName 所属插件名称
     */
    public record PluginToolOption(
            BigInteger id,
            String name,
            String description,
            String englishName,
            String pluginName
    ) {
    }

    /**
     * MCP 安全选择项。
     *
     * @param id MCP ID
     * @param title MCP 标题
     * @param description MCP 描述
     * @param approvalRequired 是否默认要求执行确认
     */
    public record McpOption(
            BigInteger id,
            String title,
            String description,
            Boolean approvalRequired
    ) {
    }

    /**
     * MCP 工具安全展示项。
     *
     * @param name 工具名称
     * @param description 工具描述
     */
    public record McpToolOption(String name, String description) {
    }
}
