package com.seer.teach.openapi.uitl;

import org.springframework.web.multipart.MultipartFile;

import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.zip.CRC32;

/**
 *
 * <p>
 *
 * </p >
 *
 * @author Captain
 * @since 2025-11-01 16:55
 */
public class OpenApiUtils {

    /**
     * 批改类型标识
     */
    public static final int SSE_TYPE_CORRECT = 0;

    /**
     * 聊天类型标识
     */
    public static final int SSE_TYPE_CHAT = 1;

    /**
     * 学习类型标识
     */
    public static final int SSE_TYPE_STUDY = 2;

    public static MultipartFile base64ToMultipart(String base64) {
        try {
            String[] baseStrs = base64.split(",");
            byte[] bytes;

            if (baseStrs.length > 1) {
                bytes = Base64.getDecoder().decode(baseStrs[1]);
            } else {
                bytes = Base64.getDecoder().decode(base64);
            }

            return new Base64DecodedMultipartFile(bytes);
        }catch (Exception e){
            throw new RuntimeException("Base64转换Multipart失败");
        }
    }

    /**
     * 根据传入的请求参数生成带时间戳的会话ID
     *
     * @param reqParams 可变参数列表，用于生成会话ID的输入参数
     * @return 基于CRC32算法与时间戳生成的会话ID，返回绝对值形式的整数
     */
    public static Integer generateSessionId(Object... reqParams) {
        CRC32 crc32 = new CRC32();
        StringBuilder sb = new StringBuilder();

        // 拼接所有非空参数
        for (Object param : reqParams) {
            if (param != null) {
                sb.append(param.toString()).append("|");
            }
        }

        // 加入当前时间戳，确保每次生成的结果唯一
        sb.append(System.currentTimeMillis());

        // 使用CRC32算法计算哈希值
        crc32.update(sb.toString().getBytes(StandardCharsets.UTF_8));
        return Math.abs((int)crc32.getValue());
    }


}
