package tech.easyflow.ai.service.discovery;

import org.springframework.stereotype.Component;

import java.util.Locale;
import java.util.Map;

/**
 * 远端模型目录的简洁静态服务商适配表。
 */
@Component
public class RemoteModelProviderAdapterRegistry {

    /** 通用 OpenAI-compatible 适配器。 */
    private final RemoteModelProviderAdapter defaultAdapter;
    /** 按规范化供应商类型维护的静态适配表。 */
    private final Map<String, RemoteModelProviderAdapter> adapters;

    /**
     * 创建静态服务商适配表。
     *
     * @param openAiCompatibleAdapter OpenAI-compatible 适配器
     * @param ollamaAdapter Ollama 适配器
     * @param aliyunAdapter 阿里百炼适配器
     */
    public RemoteModelProviderAdapterRegistry(
            OpenAiCompatibleRemoteModelAdapter openAiCompatibleAdapter,
            OllamaRemoteModelAdapter ollamaAdapter,
            AliyunRemoteModelAdapter aliyunAdapter) {
        this.defaultAdapter = openAiCompatibleAdapter;
        this.adapters = Map.ofEntries(
                Map.entry("openai", openAiCompatibleAdapter),
                Map.entry("deepseek", openAiCompatibleAdapter),
                Map.entry("zhipu", openAiCompatibleAdapter),
                Map.entry("minimax", openAiCompatibleAdapter),
                Map.entry("kimi", openAiCompatibleAdapter),
                Map.entry("siliconflow", openAiCompatibleAdapter),
                Map.entry("self-hosted", openAiCompatibleAdapter),
                Map.entry("self_hosted", openAiCompatibleAdapter),
                Map.entry("selfhost", openAiCompatibleAdapter),
                Map.entry("ollama", ollamaAdapter),
                Map.entry("aliyun", aliyunAdapter),
                Map.entry("dashscope", aliyunAdapter),
                Map.entry("bailian", aliyunAdapter));
    }

    /**
     * 根据供应商类型获取适配器。
     *
     * @param providerType 供应商类型
     * @return 专用适配器，未知类型使用通用兼容适配器
     */
    public RemoteModelProviderAdapter get(String providerType) {
        return adapters.getOrDefault(normalize(providerType), defaultAdapter);
    }

    /**
     * 规范化供应商类型。
     *
     * @param value 原始供应商类型
     * @return 小写供应商类型
     */
    private String normalize(String value) {
        return value == null ? "" : value.trim().toLowerCase(Locale.ROOT);
    }
}
