package org.xyzh.common.utils.validation.method;

import java.util.regex.Pattern;

/**
 * @description 手机号码校验方法
 * @filename PhoneValidateMethod.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-16
 */
public class PhoneValidateMethod implements ValidateMethod {
    
    // 中国大陆手机号正则
    private static final Pattern CHINA_PHONE_PATTERN = Pattern.compile("^1[3-9]\\d{9}$");
    
    // 香港手机号正则
    private static final Pattern HK_PHONE_PATTERN = Pattern.compile("^[5-9]\\d{7}$");
    
    // 台湾手机号正则
    private static final Pattern TW_PHONE_PATTERN = Pattern.compile("^09\\d{8}$");
    
    private final boolean strictMode; // 严格模式，只验证中国大陆手机号
    
    public PhoneValidateMethod() {
        this.strictMode = true;
    }
    
    public PhoneValidateMethod(boolean strictMode) {
        this.strictMode = strictMode;
    }
    
    @Override
    public boolean validate(Object value) {
        if (value == null || !(value instanceof String)) {
            return false;
        }
        
        String phone = (String) value;
        
        // 去除空格和横线
        phone = phone.replaceAll("[\\s-]", "");
        
        if (strictMode) {
            // 严格模式：只验证中国大陆手机号
            return CHINA_PHONE_PATTERN.matcher(phone).matches();
        } else {
            // 宽松模式：支持大陆、香港、台湾手机号
            return CHINA_PHONE_PATTERN.matcher(phone).matches()
                    || HK_PHONE_PATTERN.matcher(phone).matches()
                    || TW_PHONE_PATTERN.matcher(phone).matches();
        }
    }
    
    @Override
    public String getErrorMessage() {
        return strictMode ? "请输入有效的手机号码" : "请输入有效的手机号码（支持大陆、香港、台湾）";
    }
    
    @Override
    public String getName() {
        return "手机号码校验";
    }
}

