package tech.easyflow.ai.service.capability;

import org.springframework.stereotype.Component;
import tech.easyflow.ai.entity.Model;

/**
 * 统一解析静态目录和保守命名规则中的模型能力。
 */
@Component
public class ModelCapabilityResolver {

    /** 静态模型能力目录。 */
    private final ModelCapabilityCatalog catalog;

    /**
     * 创建模型能力解析器。
     *
     * @param catalog 静态模型能力目录
     */
    public ModelCapabilityResolver(ModelCapabilityCatalog catalog) {
        this.catalog = catalog;
    }

    /**
     * 解析模型类型和对话能力。
     *
     * @param providerType 供应商类型
     * @param modelId 模型 ID
     * @return 模型能力识别结果
     */
    public ModelCapabilityResolution resolve(String providerType, String modelId) {
        return catalog.find(providerType, modelId).orElseGet(() -> resolveByName(modelId));
    }

    /**
     * 对未命中目录的模型执行保守命名推断。
     *
     * @param modelId 模型 ID
     * @return 模型能力识别结果
     */
    private ModelCapabilityResolution resolveByName(String modelId) {
        if (ModelCapabilityNameRules.isRerankModel(modelId)) {
            return new ModelCapabilityResolution(
                    Model.MODEL_TYPES[2], false, false, false, ModelCapabilitySource.RULE);
        }
        if (ModelCapabilityNameRules.isEmbeddingModel(modelId)) {
            return new ModelCapabilityResolution(
                    Model.MODEL_TYPES[1], false, false, false, ModelCapabilitySource.RULE);
        }

        boolean vision = ModelCapabilityNameRules.supportsVision(modelId);
        boolean reasoning = ModelCapabilityNameRules.supportsReasoning(modelId);
        if (vision || reasoning) {
            return new ModelCapabilityResolution(
                    Model.MODEL_TYPES[0],
                    vision ? Boolean.TRUE : null,
                    reasoning ? Boolean.TRUE : null,
                    null,
                    ModelCapabilitySource.RULE);
        }
        return new ModelCapabilityResolution(
                Model.MODEL_TYPES[0], null, null, null, ModelCapabilitySource.DEFAULT);
    }
}
