package tech.easyflow.ai.service.verification;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * Chat Model 与 VLM 的双阶段连通性验证结果。
 */
public final class ChatModelVerificationResult {

    /** 整体验证状态。 */
    private final ModelVerificationStatus status;
    /** 非流式基础连接验证状态。 */
    private final ModelVerificationStatus nonStreaming;
    /** 流式响应验证状态。 */
    private final ModelVerificationStatus streaming;
    /** 实际生效的 HTTP 版本策略。 */
    private final String effectiveHttpVersion;
    /** 用户可见的简洁结果说明。 */
    private final String message;

    /**
     * 创建验证结果。
     *
     * @param status 整体验证状态
     * @param nonStreaming 非流式验证状态
     * @param streaming 流式验证状态
     * @param effectiveHttpVersion 实际生效的 HTTP 版本策略
     * @param message 用户可见结果说明
     */
    private ChatModelVerificationResult(ModelVerificationStatus status,
                                        ModelVerificationStatus nonStreaming,
                                        ModelVerificationStatus streaming,
                                        String effectiveHttpVersion,
                                        String message) {
        this.status = status;
        this.nonStreaming = nonStreaming;
        this.streaming = streaming;
        this.effectiveHttpVersion = effectiveHttpVersion;
        this.message = message;
    }

    /**
     * 创建双阶段全部通过的结果。
     *
     * @param effectiveHttpVersion 实际生效的 HTTP 版本策略
     * @return 全部通过结果
     */
    public static ChatModelVerificationResult passed(String effectiveHttpVersion) {
        return new ChatModelVerificationResult(
                ModelVerificationStatus.PASSED,
                ModelVerificationStatus.PASSED,
                ModelVerificationStatus.PASSED,
                effectiveHttpVersion,
                "验证成功");
    }

    /**
     * 创建基础连接通过但流式阶段失败的结果。
     *
     * @param effectiveHttpVersion 实际生效的 HTTP 版本策略
     * @return 部分通过结果
     */
    public static ChatModelVerificationResult streamingUnavailable(String effectiveHttpVersion) {
        return new ChatModelVerificationResult(
                ModelVerificationStatus.PARTIAL,
                ModelVerificationStatus.PASSED,
                ModelVerificationStatus.FAILED,
                effectiveHttpVersion,
                "连接成功，流式响应不可用，可关闭智能体的模型流式响应。");
    }

    /**
     * 获取整体验证状态。
     *
     * @return 整体验证状态
     */
    public ModelVerificationStatus getStatus() {
        return status;
    }

    /**
     * 获取非流式基础连接验证状态。
     *
     * @return 非流式验证状态
     */
    public ModelVerificationStatus getNonStreaming() {
        return nonStreaming;
    }

    /**
     * 获取流式响应验证状态。
     *
     * @return 流式验证状态
     */
    public ModelVerificationStatus getStreaming() {
        return streaming;
    }

    /**
     * 获取实际生效的 HTTP 版本策略。
     *
     * @return HTTP 版本策略名称
     */
    public String getEffectiveHttpVersion() {
        return effectiveHttpVersion;
    }

    /**
     * 获取用户可见结果说明。
     *
     * @return 结果说明
     */
    public String getMessage() {
        return message;
    }

    /**
     * 转换为现有模型验证接口使用的响应结构。
     *
     * @return 有序响应字段
     */
    public Map<String, Object> toMap() {
        Map<String, Object> result = new LinkedHashMap<>();
        result.put("status", status.name());
        result.put("nonStreaming", nonStreaming.name());
        result.put("streaming", streaming.name());
        result.put("effectiveHttpVersion", effectiveHttpVersion);
        result.put("message", message);
        return result;
    }
}
