package com.cslg.ppa.common.utils;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

/**
  * 正则工具类
　*/
public class RegexUtil {

    /**
     * 大陆号码或香港号码均可
     */
    public static boolean isPhoneLegal(String str) throws PatternSyntaxException {
        return isChinaPhoneLegal(str) || isHKPhoneLegal(str);
    }

    /**
     * 手机号验证，1开头，后面10位随机0-9数字
     */
    public static boolean isChinaPhoneLegal(String str) throws PatternSyntaxException {
        if (str == null) {
            return false;
        }
        String regExp = "^[1][0-9]{10}$";
        Pattern p = Pattern.compile(regExp);
        Matcher m = p.matcher(str);
        return m.matches();
    }

    /**
     * 香港手机号码8位数，5|6|8|9开头+7位任意数
     */
    public static boolean isHKPhoneLegal(String str) throws PatternSyntaxException {
        if (str == null) {
            return false;
        }
        String regExp = "^(5|6|8|9)\\d{7}$";
        Pattern p = Pattern.compile(regExp);
        Matcher m = p.matcher(str);
        return m.matches();
    }

    public static boolean isRegExpReplace(String str) throws PatternSyntaxException {
        if (str == null) {
            return false;
        }
        String regExp = "[，。、；,./;]";
        Pattern p = Pattern.compile(regExp);
        Matcher m = p.matcher(str);
        return m.matches();
    }

    //split By分隔符忽略引号
    public static List<String> splitByDelimiters(String input) {
        List<String> result = new ArrayList<>();
        // 正则表达式匹配分隔符，但忽略引号内的内容
        // 注意：这里使用了Unicode转义序列来表示中文引号
        Pattern pattern = Pattern.compile("\"([^\"]*)\"|’([^’]*)’|‘([^’]*)’|“([^\"]*)”|([^，。、；,./;\\s+]+)");
        Matcher matcher = pattern.matcher(input);

        while (matcher.find()) {
            if (matcher.group(1) != null) { // 英文双引号
                result.add(matcher.group(1));
            } else if (matcher.group(2) != null) { // 中文单引号
                result.add(matcher.group(2));
            } else if (matcher.group(3) != null) { // 中文单引号（另一种可能的形式）
                result.add(matcher.group(3));
            } else if (matcher.group(4) != null) { // 中文双引号
                result.add(matcher.group(4));
            } else { // 其他内容（即分隔符外的部分）
                result.add(matcher.group(5));
            }
        }
        return result;

    }
    private static final Pattern DATE_PATTERN = Pattern.compile("(?<!\\d)(\\d{4}-\\d{2}-\\d{2})(?!\\d)");
    public static String extractDate(String input) {
        if (input == null || input.trim().isEmpty()) {
            return null;
        }

        Matcher matcher = DATE_PATTERN.matcher(input);
        String lastMatch = null;

        // 查找所有匹配项并记录最后一个
        while (matcher.find()) {
            lastMatch = matcher.group(1);
        }

        return lastMatch;
    }
}
