package tech.easyflow.ai.service;

import tech.easyflow.ai.vo.OfflineImpactBindingVo;

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

/**
 * Agent 对共享 AI 资源的统一引用查询服务。
 */
public interface AgentResourceReferenceService {

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

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

    /**
     * 校验工作流没有被 Agent、Skill 草稿或有效发布快照引用。
     *
     * @param workflowId 工作流 ID
     */
    void assertWorkflowUnused(BigInteger workflowId);

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

    /**
     * 校验插件工具没有被 Agent 草稿或发布快照引用。
     *
     * @param pluginItemIds 插件工具 ID 集合
     */
    void assertPluginItemsUnused(Collection<BigInteger> pluginItemIds);

    /**
     * 校验 MCP 没有被 Agent 草稿或发布快照引用。
     *
     * @param mcpId MCP ID
     */
    void assertMcpUnused(BigInteger mcpId);

    /**
     * 校验模型没有被 Agent 草稿或发布快照引用。
     *
     * @param modelIds 模型 ID 集合
     */
    void assertModelsUnused(Collection<BigInteger> modelIds);

    /**
     * 从 Agent 草稿绑定和发布快照中解绑工作流。
     *
     * @param workflowId 工作流 ID
     */
    void unbindWorkflow(BigInteger workflowId);

    /**
     * 从 Agent 草稿绑定和发布快照中解绑知识库。
     *
     * @param knowledgeId 知识库 ID
     */
    void unbindKnowledge(BigInteger knowledgeId);
}
