package org.springblade.common.utils;

/**
 * 脱敏工具类
 *
 * @author bonus
 */
public class DesensitizedUtil {
    /**
     * 密码的全部字符都用*代替，比如：******
     *
     * @param password 密码
     * @return 脱敏后的密码
     */
    public static String password(String password) {
        if (StringUtils.isBlank(password)) {
            return StringUtils.EMPTY;
        }
        return StringUtils.repeat('*', password.length());
    }

    /**
     * 车牌中间用*代替，如果是错误的车牌，不处理
     *
     * @param carLicense 完整的车牌号
     * @return 脱敏后的车牌
     */
    public static String carLicense(String carLicense) {
        if (StringUtils.isBlank(carLicense)) {
            return StringUtils.EMPTY;
        }
        // 普通车牌
        if (carLicense.length() == 7) {
            carLicense = StringUtils.hide(carLicense, 3, 6);
        } else if (carLicense.length() == 8) {
            // 新能源车牌
            carLicense = StringUtils.hide(carLicense, 3, 7);
        }
        return carLicense;
    }

    // IPv4 地址中间用*代替(脱敏)
    public static String ipMiddle(String ip) {
        if (StringUtils.isBlank(ip)) {
            return StringUtils.EMPTY;
        }

        String[] parts = ip.split("\\.");
        if (parts.length != 4) {
            // 非标准 IPv4 格式
            return "xxx.xxx.xxx.xxx";
        }

        // 验证每一段是否为有效数字（0-255）
        for (String part : parts) {
            if (!StringUtils.isNumeric(part)) {
                return "xxx.xxx.xxx.xxx";
            }
            int num = Integer.parseInt(part);
            if (num < 0 || num > 255) {
                return "xxx.xxx.xxx.xxx";
            }
        }

        // 保留第1段和第4段，中间两段脱敏
        return parts[0] + ".*.*." + parts[3];
    }

    // 手机号脱敏
    public static String maskPhone(String phone) {
        if (phone == null || phone.length() != 11) {
            return phone; // 非法手机号，原样返回或返回null
        }
        return phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
    }
}
