package tech.easyflow.ai.service.capability;

import java.util.Set;

/**
 * 静态模型目录中的展示元数据与能力信息。
 */
public final class ModelCatalogMetadata {

    /** 规范化模型目录 ID。 */
    private final String modelId;
    /** 模型展示名称。 */
    private final String displayName;
    /** 模型家族。 */
    private final String family;
    /** 输入模态。 */
    private final Set<String> inputModalities;
    /** 输出模态。 */
    private final Set<String> outputModalities;
    /** EasyFlow 模型能力。 */
    private final ModelCapabilityResolution capability;

    /**
     * 创建模型目录元数据。
     *
     * @param modelId 规范化模型目录 ID
     * @param displayName 模型展示名称
     * @param family 模型家族
     * @param inputModalities 输入模态
     * @param outputModalities 输出模态
     * @param capability EasyFlow 模型能力
     */
    public ModelCatalogMetadata(String modelId,
                                String displayName,
                                String family,
                                Set<String> inputModalities,
                                Set<String> outputModalities,
                                ModelCapabilityResolution capability) {
        this.modelId = modelId;
        this.displayName = displayName;
        this.family = family;
        this.inputModalities = Set.copyOf(inputModalities);
        this.outputModalities = Set.copyOf(outputModalities);
        this.capability = capability;
    }

    /**
     * 获取模型展示名称。
     *
     * @return 模型展示名称
     */
    public String getDisplayName() {
        return displayName;
    }

    /**
     * 获取模型家族。
     *
     * @return 模型家族
     */
    public String getFamily() {
        return family;
    }

    /**
     * 获取输入模态。
     *
     * @return 不可变输入模态集合
     */
    public Set<String> getInputModalities() {
        return inputModalities;
    }

    /**
     * 获取输出模态。
     *
     * @return 不可变输出模态集合
     */
    public Set<String> getOutputModalities() {
        return outputModalities;
    }

    /**
     * 获取 EasyFlow 模型能力。
     *
     * @return 模型能力
     */
    public ModelCapabilityResolution getCapability() {
        return capability;
    }

    /**
     * 判断目录条目是否为当前系统尚未接入的生成模型。
     *
     * @return 已知属于媒体生成模型时返回 true
     */
    public boolean isUnsupportedGenerationModel() {
        if (outputModalities.isEmpty()) {
            return false;
        }
        boolean mediaOutput = outputModalities.contains("image")
                || outputModalities.contains("video")
                || outputModalities.contains("audio");
        if (mediaOutput && !outputModalities.contains("text")) {
            return true;
        }
        String normalizedFamily = family == null ? "" : family.toLowerCase();
        return mediaOutput && (containsGenerationKeyword(modelId)
                || containsGenerationKeyword(normalizedFamily));
    }

    /**
     * 判断模型标识是否明确属于媒体生成家族。
     *
     * @param value 规范化模型 ID 或家族
     * @return 命中明确生成模型关键词返回 true
     */
    private boolean containsGenerationKeyword(String value) {
        return value.contains("gpt-image")
                || value.contains("dall-e")
                || value.contains("stable-diffusion")
                || value.contains("text-to-image")
                || value.contains("text-to-video")
                || value.contains("image-generation")
                || value.contains("video-generation");
    }
}
