package org.xyzh.api.ai.agent;

import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.core.page.PageDomain;
import org.xyzh.common.core.page.PageParam;
import org.xyzh.common.dto.ai.TbAiAgentConfig;

import java.util.List;

/**
 * @description AI智能体配置服务接口
 * @filename AiAgentConfigService.java
 * @author AI Assistant
 * @copyright xyzh
 * @since 2025-11-04
 */
public interface AiAgentConfigService {

    /**
     * 创建智能体
     * @param agentConfig 智能体配置
     * @return 创建结果
     */
    ResultDomain<TbAiAgentConfig> createAgent(TbAiAgentConfig agentConfig);

    /**
     * 更新智能体
     * @param agentConfig 智能体配置
     * @return 更新结果
     */
    ResultDomain<TbAiAgentConfig> updateAgent(TbAiAgentConfig agentConfig);

    /**
     * 删除智能体（逻辑删除）
     * @param agentId 智能体ID
     * @return 删除结果
     */
    ResultDomain<Boolean> deleteAgent(String agentId);

    /**
     * 根据ID查询智能体
     * @param agentId 智能体ID
     * @return 智能体配置
     */
    ResultDomain<TbAiAgentConfig> getAgentById(String agentId);

    /**
     * 查询所有启用的智能体列表
     * @return 智能体列表
     */
    ResultDomain<TbAiAgentConfig> listEnabledAgents();

    /**
     * 查询智能体列表（支持过滤）
     * @param filter 过滤条件
     * @return 智能体列表
     */
    ResultDomain<TbAiAgentConfig> listAgents(TbAiAgentConfig filter);

    /**
     * 分页查询智能体列表
     * @param filter 过滤条件
     * @param pageParam 分页参数
     * @return 分页结果
     */
    PageDomain<TbAiAgentConfig> pageAgents(TbAiAgentConfig filter, PageParam pageParam);

    /**
     * 更新智能体状态
     * @param agentId 智能体ID
     * @param status 状态：0-禁用，1-启用
     * @return 更新结果
     */
    ResultDomain<Boolean> updateAgentStatus(String agentId, Integer status);

    /**
     * 更新智能体Dify配置
     * @param agentId 智能体ID
     * @param difyAppId Dify应用ID
     * @param difyApiKey Dify API密钥
     * @return 更新结果
     */
    ResultDomain<Boolean> updateDifyConfig(String agentId, String difyAppId, String difyApiKey);

    /**
     * 验证智能体名称是否存在
     * @param name 智能体名称
     * @param excludeId 排除的智能体ID（用于更新时）
     * @return 是否存在
     */
    ResultDomain<Boolean> checkNameExists(String name, String excludeId);
}
