package tech.easyflow.ai.service.discovery;

import com.fasterxml.jackson.databind.JsonNode;
import org.springframework.stereotype.Component;
import tech.easyflow.ai.entity.ModelProvider;
import tech.easyflow.common.web.exceptions.BusinessException;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * Ollama 原生 {@code /api/tags} 模型目录适配器。
 */
@Component
public class OllamaRemoteModelAdapter implements RemoteModelProviderAdapter {

    /**
     * 获取 Ollama 本地模型 ID。
     *
     * @param provider 已保存的服务商配置
     * @param httpClient 受控 HTTP 客户端
     * @return 原始模型 ID 列表
     * @throws BusinessException 响应结构不兼容时抛出
     */
    @Override
    public List<String> fetchModelIds(ModelProvider provider, RemoteModelHttpClient httpClient) {
        JsonNode root = httpClient.getJson(provider, "/api/tags", Map.of());
        JsonNode models = root.get("models");
        if (models == null || !models.isArray()) {
            throw new BusinessException(502, 50232, "Ollama 模型列表响应格式不兼容");
        }
        List<String> modelIds = new ArrayList<>();
        models.forEach(item -> {
            JsonNode value = item.get("name");
            if (value == null || !value.isTextual() || value.asText().isBlank()) {
                value = item.get("model");
            }
            if (value != null && value.isTextual() && !value.asText().isBlank()) {
                modelIds.add(value.asText());
            }
        });
        return modelIds;
    }
}
