package org.xyzh.ai.config;

import lombok.Data;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.xyzh.api.system.config.SysConfigService;

/**
 * @description Dify配置类
 * @filename DifyConfig.java
 * @author AI Assistant
 * @copyright xyzh
 * @since 2025-11-04
 */
@Data
@Configuration
@ConfigurationProperties(prefix = "dify")
public class DifyConfig {

    @Autowired
    private SysConfigService sysConfigService;

    /**
     * Dify API基础地址
     */
    private String apiBaseUrl = "http://192.168.130.131/v1";

    /**
     * Dify API密钥（默认密钥，可被智能体的密钥覆盖）
     */
    // private String apiKey="app-PTHzp2DsLPyiUrDYTXBGxL1f";
    private String apiKey="app-6VXXDHRC8fiTijeRfnwzOyGn";

    private String knowledgeApiKey="dataset-nupqKP4LONpzdXmGthIrbjeJ";

    /**
     * 请求超时时间（秒）
     */
    private Integer timeout = 60;

    /**
     * 连接超时时间（秒）
     */
    private Integer connectTimeout = 10;

    /**
     * 读取超时时间（秒）
     */
    private Integer readTimeout = 60;

    /**
     * 流式响应超时时间（秒）
     */
    private Integer streamTimeout = 300;

    /**
     * 最大重试次数
     */
    private Integer maxRetries = 3;

    /**
     * 重试间隔（毫秒）
     */
    private Long retryInterval = 1000L;

    /**
     * 是否启用Dify集成
     */
    private Boolean enabled = true;

    /**
     * 上传文件配置
     */
    private Upload upload = new Upload();

    /**
     * 知识库配置
     */
    private Dataset dataset = new Dataset();

    /**
     * 对话配置
     */
    private Chat chat = new Chat();

    @Data
    public static class Upload {
        /**
         * 支持的文件类型
         */
        private String[] allowedTypes = {"pdf", "txt", "docx", "doc", "md", "html", "htm"};

        /**
         * 最大文件大小（MB）
         */
        private Integer maxSize = 50;

        /**
         * 批量上传最大文件数
         */
        private Integer batchMaxCount = 10;
    }

    @Data
    public static class Dataset {
        /**
         * 默认索引方式（high_quality/economy）
         */
        private String defaultIndexingTechnique = "high_quality";

        /**
         * 默认Embedding模型
         */
        private String defaultEmbeddingModel = "text-embedding-ada-002";

        /**
         * 文档分段策略
         */
        private String segmentationStrategy = "automatic";

        /**
         * 分段最大长度
         */
        private Integer maxSegmentLength = 1000;

        /**
         * 分段重叠长度
         */
        private Integer segmentOverlap = 50;
    }

    @Data
    public static class Chat {
        /**
         * 默认温度值
         */
        private Double defaultTemperature = 0.7;

        /**
         * 默认最大Token数
         */
        private Integer defaultMaxTokens = 2000;

        /**
         * 默认Top P值
         */
        private Double defaultTopP = 1.0;

        /**
         * 是否启用流式响应
         */
        private Boolean enableStream = true;

        /**
         * 对话上下文最大消息数
         */
        private Integer maxContextMessages = 10;
    }

    /**
     * 验证配置是否有效
     */
    public boolean isValid() {
        return enabled && apiBaseUrl != null && !apiBaseUrl.trim().isEmpty();
    }

    /**
     * 获取完整的API URL
     */
    public String getFullApiUrl(String endpoint) {
        String baseUrl = apiBaseUrl.endsWith("/") ? apiBaseUrl.substring(0, apiBaseUrl.length() - 1) : apiBaseUrl;
        String path = endpoint.startsWith("/") ? endpoint : "/" + endpoint;
        return baseUrl + path;
    }
}

