package com.cool.store.utils;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JSONUtils {

    // 创建 ObjectMapper 实例（建议单例）
    private static final ObjectMapper objectMapper = new ObjectMapper();

    /**
     * 将 JSON 字符串解析为指定类型的对象
     *
     * @param jsonString JSON 字符串
     * @param clazz      目标类型的 Class 对象
     * @param <T>        泛型类型
     * @return 转换后的对象
     */
    public static <T> T parseToObject(String jsonString, Class<T> clazz) {
        if (StringUtil.isBlank(jsonString) || clazz == null){
            return null;
        }
        try {
            return objectMapper.readValue(jsonString, clazz);
        } catch (JsonProcessingException e) {
            throw new RuntimeException("JSON 解析失败", e);
        }
    }

    /**
     * 将 JSON 字符串解析为指定类型的对象列表
     *
     * @param jsonString JSON 字符串
     * @param typeRef    TypeReference，用于描述复杂类型（如 List<T>）
     * @param <T>        泛型类型
     * @return 转换后的对象列表
     */
    public static <T> T parseToListOrMap(String jsonString, TypeReference<T> typeRef) {
        if (StringUtil.isBlank(jsonString) || typeRef == null){
            return null;
        }
        try {
            return objectMapper.readValue(jsonString, typeRef);
        } catch (JsonProcessingException e) {
            throw new RuntimeException("JSON 解析失败", e);
        }
    }

    /**
     * 将对象转换为 JSON 字符串
     *
     * @param object 待转换的对象
     * @return JSON 字符串
     */
    public static String toJsonString(Object object) {
        if (object == null){
            return null;
        }
        try {
            return objectMapper.writeValueAsString(object);
        } catch (JsonProcessingException e) {
            throw new RuntimeException("对象转 JSON 失败", e);
        }
    }
}