package tech.easyflow.ai.service.support;

import tech.easyflow.common.web.exceptions.BusinessException;

import java.io.IOException;
import java.io.InputStream;

/**
 * 提供模型连接验证专用的固定 PNG 图片。
 */
public final class VlmVerificationImage {

    /** 模型需要识别并返回的固定数字。 */
    public static final String VERIFICATION_CODE = "5839";

    /** 固定验证图片的 classpath 路径。 */
    private static final String RESOURCE_PATH = "/images/vlm-verification.png";
    /** PNG 文件签名字节。 */
    private static final byte[] PNG_SIGNATURE = {
            (byte) 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A
    };
    /** 启动后复用的固定 PNG 字节。 */
    private static final byte[] PNG_BYTES = loadPng();

    /**
     * 禁止实例化工具类。
     */
    private VlmVerificationImage() {
    }

    /**
     * 返回固定连接验证 PNG 的字节副本。
     *
     * @return PNG 字节副本
     */
    public static byte[] pngBytes() {
        return PNG_BYTES.clone();
    }

    /**
     * 从 classpath 加载固定验证图片。
     *
     * @return PNG 文件字节
     * @throws BusinessException 资源缺失、读取失败或文件格式非法时抛出
     */
    private static byte[] loadPng() {
        try (InputStream input = VlmVerificationImage.class.getResourceAsStream(RESOURCE_PATH)) {
            if (input == null) {
                throw new BusinessException("VLM 校验图片资源不存在：" + RESOURCE_PATH);
            }
            byte[] bytes = input.readAllBytes();
            if (!hasPngSignature(bytes)) {
                throw new BusinessException("VLM 校验图片资源不是有效的 PNG 文件");
            }
            return bytes;
        } catch (IOException error) {
            throw new BusinessException("VLM 校验图片读取失败：" + safeMessage(error));
        }
    }

    /**
     * 检查文件是否包含标准 PNG 签名。
     *
     * @param bytes 待检查文件字节
     * @return 包含完整 PNG 签名时返回 true
     */
    private static boolean hasPngSignature(byte[] bytes) {
        if (bytes == null || bytes.length < PNG_SIGNATURE.length) {
            return false;
        }
        for (int index = 0; index < PNG_SIGNATURE.length; index++) {
            if (bytes[index] != PNG_SIGNATURE[index]) {
                return false;
            }
        }
        return true;
    }

    /**
     * 获取非空异常描述。
     *
     * @param error 原始异常
     * @return 可展示的异常描述
     */
    private static String safeMessage(Exception error) {
        return error.getMessage() == null || error.getMessage().isBlank()
                ? "未知错误"
                : error.getMessage();
    }
}
