package com.sikey.wa04.common.utils;

import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.experimental.UtilityClass;

import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.Map;
import java.util.TreeMap;

@UtilityClass
public class BaiduUtil {

    /**
     * 对Map内所有value作utf8编码，拼接返回结果
     *
     * @param data
     * @return
     */
    /*public static String toQueryString(Map<?, ?> data) throws Exception {
        StringBuilder queryString = new StringBuilder();
        for (Map.Entry<?, ?> pair : data.entrySet()) {
            queryString.append(pair.getKey()).append("=");
            queryString.append(URLEncoder.encode((String) pair.getValue(), StandardCharsets.UTF_8)).append("&");
        }
        if (!queryString.isEmpty()) {
            queryString.deleteCharAt(queryString.length() - 1);
        }
        return queryString.toString();
    }*/


    /**
     * 来自stackoverflow的MD5计算方法，调用了MessageDigest库函数，并把byte数组结果转换成16进制
     *
     * @param md5
     * @return
     */
    public static String SNForMD5(String md5) throws Exception {
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] array = md.digest(md5.getBytes());
        StringBuilder sb = new StringBuilder();
        for (byte b : array) {
            sb.append(Integer.toHexString((b & 0xFF) | 0x100), 1, 3);
        }
        return sb.toString();
    }

    /**
     * 将对象转换为按字段名排序的 Map
     *
     * @param obj 实体对象
     * @return
     */
    public static Map<String, Object> convertToSortedMap(Object obj) {
        // 将对象转换为 JSONObject（Hutool 默认使用有序的 LinkedHashMap）
        JSONObject jsonObject = JSONUtil.parseObj(obj);
        // 转换为 TreeMap 实现按键名排序
        return new TreeMap<>(jsonObject);
    }
}
