package com.pig4cloud.pig.marketing.util;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * 设备信息解析工具类
 * 
 * @author WCL
 * @date 2025-09-04
 * @description 解析设备信息JSON字符串，提取bundle和appId
 */
@Slf4j
@Component
public class DeviceInfoUtil {

    private final ObjectMapper objectMapper = new ObjectMapper();

    /**
     * 从设备信息JSON字符串中提取bundle
     * 
     * @param deviceInfoJson 设备信息JSON字符串
     * @return bundle值
     */
    public String extractBundle(String deviceInfoJson) {
        if (deviceInfoJson == null || deviceInfoJson.trim().isEmpty()) {
            return null;
        }
        
        try {
            JsonNode rootNode = objectMapper.readTree(deviceInfoJson);
            JsonNode bundleNode = rootNode.get("bundle");
            if (bundleNode != null && !bundleNode.isNull()) {
                return bundleNode.asText();
            }
        } catch (Exception e) {
            log.error("解析设备信息bundle失败，deviceInfo：{}", deviceInfoJson, e);
        }
        
        return null;
    }
    
    /**
     * 从设备信息JSON字符串中提取appId
     * 
     * @param deviceInfoJson 设备信息JSON字符串
     * @return appId值
     */
    public String extractAppId(String deviceInfoJson) {
        if (deviceInfoJson == null || deviceInfoJson.trim().isEmpty()) {
            return null;
        }
        
        try {
            JsonNode rootNode = objectMapper.readTree(deviceInfoJson);
            JsonNode appIdNode = rootNode.get("appId");
            if (appIdNode != null && !appIdNode.isNull()) {
                return appIdNode.asText();
            }
        } catch (Exception e) {
            log.error("解析设备信息appId失败，deviceInfo：{}", deviceInfoJson, e);
        }
        
        return null;
    }

    /**
     * 从设备信息JSON字符串中提取bundle和appId
     * 
     * @param deviceInfoJson 设备信息JSON字符串
     * @return 包含bundle和appId的数组，[0]为bundle，[1]为appId
     */
    public String[] extractBundleAndAppId(String deviceInfoJson) {
        String[] result = new String[2];
		String str = deviceInfoJson.substring(deviceInfoJson.indexOf("{"));
        result[0] = extractBundle(str);
        result[1] = extractAppId(str);
        return result;
    }
}
