package com.ylx.common.utils;

import org.apache.commons.lang3.StringUtils;
import java.util.regex.Pattern;

/**
 * 手机号工具类
 */
public class PhoneUtils {

    /**
     * 国内手机号正则表达式 (支持11位手机号)
     */
    private static final Pattern PHONE_PATTERN = Pattern.compile("^(1[3-9]\\d{9})$");

    /**
     * 手机号脱敏处理
     * 规则：保留前3位，中间4位用*替换，保留后4位
     * 示例：13812345678 -> 138****5678
     *
     * @param phoneNumber 原始手机号
     * @return 脱敏后的手机号，若传入为空或格式不对则返回原值
     */
    public static String maskPhoneNumber(String phoneNumber) {
        // 1. 空值防御
        if (StringUtils.isBlank(phoneNumber)) {
            return null;
        }

        // 去除可能存在的空格
        phoneNumber = phoneNumber.trim();

        // 2. 格式校验：如果是标准的11位手机号，则进行脱敏
        if (PHONE_PATTERN.matcher(phoneNumber).matches()) {
            // 方式一：使用正则替换（推荐，简洁优雅）
            return phoneNumber.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");

            // 方式二：使用字符串截取（备选方案）
            // return phoneNumber.substring(0, 3) + "****" + phoneNumber.substring(7);
        }

        // 3. 如果不是标准手机号（如座机、海外号码、虚拟号等），可选择返回原值或全部打码
        // 这里为了安全起见，非标准手机号直接返回原值
        return phoneNumber;
    }

    /**
     * 验证是否为合法的手机号格式
     */
    public static boolean isValidPhoneNumber(String phoneNumber) {
        if (StringUtils.isBlank(phoneNumber)) {
            return false;
        }
        return PHONE_PATTERN.matcher(phoneNumber.trim()).matches();
    }
}
