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 Boolean supportTool;
    /** 用户可见的简洁结果说明。 */
    private final String message;

    /**
     * 创建验证结果。
     *
     * @param status 整体验证状态
     * @param nonStreaming 非流式验证状态
     * @param streaming 流式验证状态
     * @param effectiveHttpVersion 实际生效的 HTTP 版本策略
     * @param supportTool 当前端点是否通过工具调用探测
     * @param message 用户可见结果说明
     */
    private ChatModelVerificationResult(ModelVerificationStatus status,
                                        ModelVerificationStatus nonStreaming,
                                        ModelVerificationStatus streaming,
                                        String effectiveHttpVersion,
                                        Boolean supportTool,
                                        String message) {
        this.status = status;
        this.nonStreaming = nonStreaming;
        this.streaming = streaming;
        this.effectiveHttpVersion = effectiveHttpVersion;
        this.supportTool = supportTool;
        this.message = message;
    }

    /**
     * 创建一次连接与工具探测通过的结果。
     *
     * @param effectiveHttpVersion 实际生效的 HTTP 版本策略
     * @param supportTool 当前端点是否通过工具调用探测
     * @return 验证通过结果
     */
    public static ChatModelVerificationResult passed(String effectiveHttpVersion,
                                                      boolean supportTool) {
        return new ChatModelVerificationResult(
                ModelVerificationStatus.PASSED,
                ModelVerificationStatus.PASSED,
                ModelVerificationStatus.SKIPPED,
                effectiveHttpVersion,
                supportTool,
                "验证通过");
    }

    /**
     * 获取整体验证状态。
     *
     * @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 Boolean getSupportTool() {
        return supportTool;
    }

    /**
     * 获取用户可见结果说明。
     *
     * @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);
        if (supportTool != null) {
            result.put("supportTool", supportTool);
        }
        result.put("message", message);
        return result;
    }
}
