package cn.iocoder.yudao.module.pms.service.qhse;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
import org.apache.commons.lang3.StringUtils;

public class ChineseLetterUtil {

    private static final HanyuPinyinOutputFormat PINYIN_FORMAT;

    static {
        PINYIN_FORMAT = new HanyuPinyinOutputFormat();
        PINYIN_FORMAT.setCaseType(HanyuPinyinCaseType.UPPERCASE); // 大写
        PINYIN_FORMAT.setToneType(HanyuPinyinToneType.WITHOUT_TONE); // 无声调
    }

    public static String convert(String input) {
        if (input == null || StringUtils.isBlank(input)) {
            return "";
        }

        // 1. 去掉所有空格
        String s = input.replaceAll("\\s+", "");

        // 2. 去掉末尾的“队”
        if (s.endsWith("队")) {
            s = s.substring(0, s.length() - 1);
        }

        // 3. 核心转换：中文 → 首字母大写，英文/数字直接保留
        StringBuilder result = new StringBuilder();
        for (char c : s.toCharArray()) {
            if (isChinese(c)) {
                // 中文字符 → 取首字母
                try {
                    String[] pinyinArr = PinyinHelper.toHanyuPinyinStringArray(c, PINYIN_FORMAT);
                    if (pinyinArr != null && pinyinArr.length > 0) {
                        result.append(pinyinArr[0].charAt(0));
                    }
                } catch (BadHanyuPinyinOutputFormatCombination e) {
                    e.printStackTrace();
                }
            } else {
                // 英文、数字 → 直接追加
                result.append(c);
            }
        }

        return result.toString();
    }
    public static String getFirstLetterPinyin(char ch) {
        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
        format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

        try {
            String[] pinyin = PinyinHelper.toHanyuPinyinStringArray(ch, format);
            if (pinyin != null && pinyin.length > 0) {
                return pinyin[0].substring(0, 1);
            }
        } catch (BadHanyuPinyinOutputFormatCombination e) {
            // 转换失败时返回原字符
        }
        return String.valueOf(ch);
    }
    // 判断是否为中文字符
    private static boolean isChinese(char c) {
        return Character.UnicodeScript.of(c) == Character.UnicodeScript.HAN;
    }

    // 测试
    public static void main(String[] args) {
        System.out.println(convert("小修22队"));    // 正确输出：XX22
        System.out.println(convert("OS 203队"));    // 正确输出：OS203
        System.out.println(convert("大修1队"));     // 正确输出：DX1
        System.out.println(convert("综合3队"));     // 正确输出：ZH3
    }
}