package com.emotion.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.emotion.common.PageResult;
import com.emotion.dto.request.aiconfig.*;
import com.emotion.dto.response.aiconfig.AiConfigResponse;
import com.emotion.entity.AiConfig;

import java.util.List;

/**
 * AI配置服务接口
 * 
 * @author system
 * @date 2025-10-30
 */
public interface AiConfigService extends IService<AiConfig> {
    
    /**
     * 分页查询AI配置
     */
    IPage<AiConfig> getPage(AiConfigPageRequest request);
    
    /**
     * 分页查询AI配置并返回响应对象
     */
    PageResult<AiConfigResponse> getPageWithResponse(AiConfigPageRequest request);
    
    /**
     * 根据ID获取AI配置响应对象
     */
    AiConfigResponse getAiConfigResponseById(String id);
    
    /**
     * 创建AI配置并返回响应对象
     */
    AiConfigResponse createAiConfigWithResponse(AiConfigCreateRequest request);
    
    /**
     * 更新AI配置并返回响应对象
     */
    AiConfigResponse updateAiConfigWithResponse(AiConfigUpdateRequest request);
    
    /**
     * 根据配置类型查询AI配置
     */
    List<AiConfig> getByConfigType(String configType);
    
    /**
     * 根据配置类型查询AI配置并返回响应对象
     */
    List<AiConfigResponse> getByConfigTypeWithResponse(String configType);
    
    /**
     * 根据服务提供商查询AI配置
     */
    List<AiConfig> getByProvider(String provider);
    
    /**
     * 根据服务提供商查询AI配置并返回响应对象
     */
    List<AiConfigResponse> getByProviderWithResponse(String provider);
    
    /**
     * 根据使用场景查询AI配置
     */
    List<AiConfig> getByUsageScenario(String usageScenario);
    
    /**
     * 根据使用场景查询AI配置并返回响应对象
     */
    List<AiConfigResponse> getByUsageScenarioWithResponse(String usageScenario);
    
    /**
     * 根据环境查询AI配置
     */
    List<AiConfig> getByEnvironment(String environment);
    
    /**
     * 根据环境查询AI配置并返回响应对象
     */
    List<AiConfigResponse> getByEnvironmentWithResponse(String environment);
    
    /**
     * 查询已启用的AI配置
     */
    List<AiConfig> getEnabledConfigs();
    
    /**
     * 查询已启用的AI配置并返回响应对象
     */
    List<AiConfigResponse> getEnabledConfigsWithResponse();
    
    /**
     * 查询已禁用的AI配置
     */
    List<AiConfig> getDisabledConfigs();
    
    /**
     * 查询已禁用的AI配置并返回响应对象
     */
    List<AiConfigResponse> getDisabledConfigsWithResponse();
    
    /**
     * 查询默认配置
     */
    List<AiConfig> getDefaultConfigs();
    
    /**
     * 查询默认配置并返回响应对象
     */
    List<AiConfigResponse> getDefaultConfigsWithResponse();
    
    /**
     * 根据配置键值查询AI配置
     */
    AiConfig getByConfigKey(String configKey);
    
    /**
     * 根据配置键值查询AI配置并返回响应对象
     */
    AiConfigResponse getByConfigKeyWithResponse(String configKey);
    
    /**
     * 启用AI配置
     */
    boolean enableConfig(String id);
    
    /**
     * 禁用AI配置
     */
    boolean disableConfig(String id);
    
    /**
     * 设置为默认配置
     */
    boolean setAsDefault(String id);
    
    /**
     * 取消默认配置
     */
    boolean unsetDefault(String id);
    
    /**
     * 根据使用场景和环境查询最优配置
     */
    AiConfig getBestConfig(String usageScenario, String environment);
    
    /**
     * 根据使用场景和环境查询最优配置并返回响应对象
     */
    AiConfigResponse getBestConfigWithResponse(String usageScenario, String environment);
    
    /**
     * 统计已启用配置数量
     */
    Long countEnabledConfigs();
    
    /**
     * 统计已禁用配置数量
     */
    Long countDisabledConfigs();
    
    /**
     * 统计默认配置数量
     */
    Long countDefaultConfigs();
    
    /**
     * 根据配置类型统计数量
     */
    Long countByConfigType(String configType);
    
    /**
     * 根据服务提供商统计数量
     */
    Long countByProvider(String provider);
    
    /**
     * 测试后更新AI配置
     * 从测试请求中解析参数并更新配置
     */
    AiConfigResponse updateFromTestRequest(AiConfigTestUpdateRequest request);
}