package tech.easyflow.ai.service;

import tech.easyflow.ai.vo.OfflineImpactBindingVo;

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

/**
 * Agent 对共享 AI 资源的绑定查询与解绑契约。
 *
 * <p>契约定义在 AI 模块中，由 Agent 模块实现，避免共享资源生命周期反向依赖 Agent 实体。</p>
 */
public interface AgentResourceBindingProvider {

    /**
     * 查询绑定指定工作流的 Agent。
     *
     * @param workflowId 工作流 ID
     * @return Agent 摘要列表
     */
    List<OfflineImpactBindingVo> listAgentsByWorkflowId(BigInteger workflowId);

    /**
     * 查询绑定指定知识库的 Agent。
     *
     * @param knowledgeId 知识库 ID
     * @return Agent 摘要列表
     */
    List<OfflineImpactBindingVo> listAgentsByKnowledgeId(BigInteger knowledgeId);

    /**
     * 查询绑定指定插件工具的 Agent。
     *
     * @param pluginItemId 插件工具 ID
     * @return Agent 摘要列表
     */
    List<OfflineImpactBindingVo> listAgentsByPluginItemId(BigInteger pluginItemId);

    /**
     * 查询绑定指定 MCP 的 Agent。
     *
     * @param mcpId MCP ID
     * @return Agent 摘要列表
     */
    List<OfflineImpactBindingVo> listAgentsByMcpId(BigInteger mcpId);

    /**
     * 查询使用指定模型的 Agent。
     *
     * @param modelId 模型 ID
     * @return Agent 摘要列表
     */
    List<OfflineImpactBindingVo> listAgentsByModelId(BigInteger modelId);

    /**
     * 解绑指定工作流及 Agent 发布快照中的对应绑定。
     *
     * @param workflowId 工作流 ID
     */
    void unbindWorkflow(BigInteger workflowId);

    /**
     * 解绑指定知识库及 Agent 发布快照中的对应绑定。
     *
     * @param knowledgeId 知识库 ID
     */
    void unbindKnowledge(BigInteger knowledgeId);
}
