package shop.alien.entity.store.dto.deserializer;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * 自定义反序列化器：将字符串或数组转换为List<String>
 * 支持以下格式：
 * - 字符串："0" 或 "1,2,3"
 * - 数组：["1", "2", "3"]
 * - null：返回空列表
 */
public class StringToListDeserializer extends JsonDeserializer<List<String>> {

    @Override
    public List<String> deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        JsonNode node = p.getCodec().readTree(p);
        
        if (node == null || node.isNull()) {
            return new ArrayList<>();
        }
        
        List<String> result = new ArrayList<>();
        
        // 如果是数组
        if (node.isArray()) {
            for (JsonNode item : node) {
                if (item != null && !item.isNull()) {
                    result.add(item.asText());
                }
            }
        } 
        // 如果是字符串
        else if (node.isTextual()) {
            String value = node.asText();
            if (value != null && !value.trim().isEmpty()) {
                // 如果是逗号分隔的字符串，则分割
                if (value.contains(",")) {
                    String[] parts = value.split(",");
                    for (String part : parts) {
                        String trimmed = part.trim();
                        if (!trimmed.isEmpty()) {
                            result.add(trimmed);
                        }
                    }
                } else {
                    // 单个值
                    result.add(value.trim());
                }
            }
        }
        // 如果是数字，转换为字符串
        else if (node.isNumber()) {
            result.add(node.asText());
        }
        
        return result;
    }
}

