package com.lesingle.common.util;

/**
 * 敏感信息脱敏工具类
 * 用于日志输出时对手机号、身份证号、Token 等进行脱敏处理
 */
public final class SensitiveUtil {

    private SensitiveUtil() {}

    /**
     * 手机号脱敏：保留前3位和后4位
     * 例：13812345678 → 138****5678
     */
    public static String phone(String phone) {
        if (phone == null || phone.length() < 7) {
            return "***";
        }
        return phone.substring(0, 3) + "****" + phone.substring(phone.length() - 4);
    }

    /**
     * Token 脱敏：只显示前8位和后4位
     * 例：eyJhbGciOi...xyz → eyJhbGci...xyz
     */
    public static String token(String token) {
        if (token == null || token.length() < 12) {
            return "***";
        }
        return token.substring(0, 8) + "..." + token.substring(token.length() - 4);
    }

    /**
     * 身份证号脱敏：保留前3位和后4位
     */
    public static String idCard(String idCard) {
        if (idCard == null || idCard.length() < 7) {
            return "***";
        }
        return idCard.substring(0, 3) + "***********" + idCard.substring(idCard.length() - 4);
    }

    /**
     * 通用脱敏：只显示前后各 n 位
     */
    public static String mask(String value, int keepChars) {
        if (value == null) return "***";
        if (value.length() <= keepChars * 2) return "***";
        return value.substring(0, keepChars) + "***" + value.substring(value.length() - keepChars);
    }
}
