package com.red.circle.other.app.util;

import com.alibaba.nacos.common.utils.StringUtils;
import com.red.circle.other.infra.database.rds.entity.user.user.LatestMobileDevice;

import java.util.Objects;

public class EnhancedDeviceUtil {

    /**
     * 构建增强版设备指纹（新版本 - 不含IMEI）
     * 组成：手机型号 + 系统版本 + IP段 + 编译版本
     */
    public static String buildEnhancedDeviceFingerprintV2(LatestMobileDevice device) {
        StringBuilder sb = new StringBuilder();

        sb.append(StringUtils.isBlank(device.getPhoneModel()) ? "" : device.getPhoneModel()).append("|");
        sb.append(StringUtils.isBlank(device.getPhoneSysVersion()) ? "" : device.getPhoneSysVersion()).append("|");
        sb.append(getIpPrefix(device.getIp())).append("|");
        sb.append(Objects.nonNull(device.getBuildVersion()) ? device.getBuildVersion() : 0);

        return sb.toString();
    }

    /**
     * 构建增强版设备指纹
     * 组成：手机型号 + 系统版本 + IMEI + IP段 + 编译版本
     */
    public static String buildEnhancedDeviceFingerprint(LatestMobileDevice device) {
        StringBuilder sb = new StringBuilder();

        sb.append(com.red.circle.tool.core.text.StringUtils.isBlank(device.getPhoneModel()) ? "" : device.getPhoneModel()).append("|");
        sb.append(com.red.circle.tool.core.text.StringUtils.isBlank(device.getPhoneSysVersion()) ? "" : device.getPhoneSysVersion()).append("|");
        sb.append(com.red.circle.tool.core.text.StringUtils.isBlank(device.getImei()) ? "" : device.getImei()).append("|");
        sb.append(getIpPrefix(device.getIp())).append("|");
        sb.append(Objects.nonNull(device.getBuildVersion()) ? device.getBuildVersion() : 0);

        return sb.toString();
    }

    /**
     * 获取IP前缀段（提高稳定性）
     * IPv4: 取前3段（如 192.168.1.xxx -> 192.168.1）
     * IPv6: 取前4段（如 2a0d:5600:24:449:xxx -> 2a0d:5600:24:449）
     */
    private static String getIpPrefix(String ip) {
        if (com.red.circle.tool.core.text.StringUtils.isBlank(ip)) {
            return "";
        }

        if (ip.contains(":")) {
            String[] parts = ip.split(":");
            if (parts.length >= 4) {
                return parts[0] + ":" + parts[1] + ":" + parts[2] + ":" + parts[3];
            }
            return ip;
        } else {
            String[] parts = ip.split("\\.");
            if (parts.length >= 3) {
                return parts[0] + "." + parts[1] + "." + parts[2];
            }
            return ip;
        }
    }


}
