package cn.qihangerp.service.external.pdd;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * 将配置源中的字符串（含环境变量 {@code EXTERNAL_PDD_SKU_OVERRIDES=[]}）转为 {@code sku-overrides} 列表。
 * <p>
 * 必须实现为<strong>带泛型的具体类</strong>，不能用法方法引用/lambda 注册为 Bean，否则 Spring MVC
 * {@code mvcConversionService} 无法解析泛型会启动失败。
 */
@Component
public class ExternalPddSkuOverridesStringConverter
        implements Converter<String, List<ExternalPddProperties.PddSkuOverride>> {

    private static final Logger log = LoggerFactory.getLogger(ExternalPddSkuOverridesStringConverter.class);

    @Override
    public List<ExternalPddProperties.PddSkuOverride> convert(String source) {
        String s = source == null ? "" : source.trim();
        if (s.isEmpty() || "[]".equals(s)) {
            return new ArrayList<>();
        }
        try {
            List<ExternalPddProperties.PddSkuOverride> list =
                    JSON.parseArray(s, ExternalPddProperties.PddSkuOverride.class);
            return list != null ? list : new ArrayList<>();
        } catch (JSONException e) {
            log.warn("external.pdd.sku-overrides 环境变量/配置非合法 JSON，已按空列表处理: {}", e.getMessage());
            return new ArrayList<>();
        }
    }
}
