package tech.easyflow.ai.service.discovery;

import tech.easyflow.ai.service.capability.ModelCapabilitySource;

/**
 * 远端模型在管理端使用的统一描述。
 */
public final class RemoteModelDescriptor {

    /** 远端原始模型 ID。 */
    private final String modelId;
    /** 模型展示名称。 */
    private final String displayName;
    /** 模型家族。 */
    private final String family;
    /** EasyFlow 模型类型。 */
    private final String modelType;
    /** 是否支持视觉输入。 */
    private final Boolean supportImage;
    /** 是否支持推理。 */
    private final Boolean supportThinking;
    /** 是否支持工具调用。 */
    private final Boolean supportTool;
    /** 能力识别来源。 */
    private final ModelCapabilitySource capabilitySource;
    /** 当前租户是否已经添加。 */
    private final boolean added;
    /** 当前模型是否允许一键添加。 */
    private final boolean addable;
    /** 无法添加时的简短原因。 */
    private final String unavailableReason;

    /**
     * 创建远端模型描述。
     *
     * @param modelId 远端原始模型 ID
     * @param displayName 模型展示名称
     * @param family 模型家族
     * @param modelType EasyFlow 模型类型
     * @param supportImage 是否支持视觉输入
     * @param supportThinking 是否支持推理
     * @param supportTool 是否支持工具调用
     * @param capabilitySource 能力识别来源
     * @param added 是否已经添加
     * @param addable 是否允许一键添加
     * @param unavailableReason 无法添加原因
     */
    public RemoteModelDescriptor(String modelId,
                                 String displayName,
                                 String family,
                                 String modelType,
                                 Boolean supportImage,
                                 Boolean supportThinking,
                                 Boolean supportTool,
                                 ModelCapabilitySource capabilitySource,
                                 boolean added,
                                 boolean addable,
                                 String unavailableReason) {
        this.modelId = modelId;
        this.displayName = displayName;
        this.family = family;
        this.modelType = modelType;
        this.supportImage = supportImage;
        this.supportThinking = supportThinking;
        this.supportTool = supportTool;
        this.capabilitySource = capabilitySource;
        this.added = added;
        this.addable = addable;
        this.unavailableReason = unavailableReason;
    }

    /** @return 远端原始模型 ID */
    public String getModelId() {
        return modelId;
    }

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

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

    /** @return EasyFlow 模型类型 */
    public String getModelType() {
        return modelType;
    }

    /** @return 是否支持视觉输入，空值表示未知 */
    public Boolean getSupportImage() {
        return supportImage;
    }

    /** @return 是否支持推理，空值表示未知 */
    public Boolean getSupportThinking() {
        return supportThinking;
    }

    /** @return 是否支持工具调用，空值表示未知 */
    public Boolean getSupportTool() {
        return supportTool;
    }

    /** @return 能力识别来源 */
    public ModelCapabilitySource getCapabilitySource() {
        return capabilitySource;
    }

    /** @return 已经添加返回 true */
    public boolean isAdded() {
        return added;
    }

    /** @return 允许一键添加返回 true */
    public boolean isAddable() {
        return addable;
    }

    /** @return 无法添加原因，可添加时为 null */
    public String getUnavailableReason() {
        return unavailableReason;
    }
}
