package com.flowing.light.board.db;


import androidx.room.TypeConverter;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

/**
 * 专门处理List<String>与String之间的转换，供Room数据库使用
 */
public class StringListConverter {
    // 初始化Gson实例
    private static final Gson gson = new Gson();

    /**
     * 序列化：将List<String>转换为JSON格式的String
     */
    @TypeConverter // 单数注解，标记这是一个类型转换方法
    public static String listToString(List<String> stringList) {
        // 处理空列表，避免序列化异常
        if (stringList == null || stringList.isEmpty()) {
            return null;
        }
        // 获取List<String>的类型令牌
        Type type = new TypeToken<List<String>>() {}.getType();
        // 转换为JSON字符串
        return gson.toJson(stringList, type);
    }

    /**
     * 反序列化：将JSON格式的String转换为List<String>
     */
    @TypeConverter // 单数注解，标记这是一个类型转换方法
    public static List<String> stringToList(String jsonString) {
        // 处理空字符串，避免反序列化异常
        if (jsonString == null || jsonString.trim().isEmpty()) {
            return new ArrayList<>(); // 返回空列表，避免后续空指针
        }
        // 获取List<String>的类型令牌
        Type type = new TypeToken<List<String>>() {}.getType();
        // 转换为List<String>
        return gson.fromJson(jsonString, type);
    }
}