package com.ai.da.common.utils;

import java.util.HashMap;
import java.util.Map;

public class ComprehensivePunctuationConverter {
    private static final Map<Character, Character> FULL_TO_HALF_MAP = new HashMap<>();

    static {
        // 中文标点到英文标点的映射（扩展版）
        FULL_TO_HALF_MAP.put('，', ',');
        FULL_TO_HALF_MAP.put('。', '.');
        FULL_TO_HALF_MAP.put('；', ';');
        FULL_TO_HALF_MAP.put('：', ':');
        FULL_TO_HALF_MAP.put('？', '?');
        FULL_TO_HALF_MAP.put('！', '!');
        FULL_TO_HALF_MAP.put('（', '(');
        FULL_TO_HALF_MAP.put('）', ')');
        FULL_TO_HALF_MAP.put('【', '[');
        FULL_TO_HALF_MAP.put('】', ']');
        FULL_TO_HALF_MAP.put('「', '\'');
        FULL_TO_HALF_MAP.put('」', '\'');
        FULL_TO_HALF_MAP.put('『', '"');
        FULL_TO_HALF_MAP.put('』', '"');
        FULL_TO_HALF_MAP.put('、', '\\');
        FULL_TO_HALF_MAP.put('～', '~');
        FULL_TO_HALF_MAP.put('—', '-');
        FULL_TO_HALF_MAP.put('．', '.');
        FULL_TO_HALF_MAP.put('〈', '<');
        FULL_TO_HALF_MAP.put('〉', '>');
        FULL_TO_HALF_MAP.put('《', '«');
        FULL_TO_HALF_MAP.put('》', '»');
        FULL_TO_HALF_MAP.put('〝', '"');
        FULL_TO_HALF_MAP.put('〞', '"');
        FULL_TO_HALF_MAP.put('﹁', '"');
        FULL_TO_HALF_MAP.put('﹂', '"');
        FULL_TO_HALF_MAP.put('…', '.');
        FULL_TO_HALF_MAP.put('﹏', '_');

        // 全角字母和数字
        for (char c = 'Ａ'; c <= 'Ｚ'; c++) {
            FULL_TO_HALF_MAP.put(c, (char)(c - 'Ａ' + 'A'));
        }
        for (char c = 'ａ'; c <= 'ｚ'; c++) {
            FULL_TO_HALF_MAP.put(c, (char)(c - 'ａ' + 'a'));
        }
        for (char c = '０'; c <= '９'; c++) {
            FULL_TO_HALF_MAP.put(c, (char)(c - '０' + '0'));
        }
    }

    /**
     * 将字符串中的全角字符（包括标点、字母、数字）转换为半角字符
     */
    public static String convertToHalfWidth(String input) {
        if (input == null || input.isEmpty()) {
            return input;
        }

        StringBuilder result = new StringBuilder();
        for (int i = 0; i < input.length(); i++) {
            char c = input.charAt(i);

            // 检查映射表
            if (FULL_TO_HALF_MAP.containsKey(c)) {
                result.append(FULL_TO_HALF_MAP.get(c));
            }
            // 处理全角空格（Unicode 12288）
            else if (c == '　') {
                result.append(' ');
            }
            // 其他字符保持不变
            else {
                result.append(c);
            }
        }

        return result.toString();
    }

    public static void main(String[] args) {
//        String text = "这是一个全角示例，包含：中文标点、全角字母（ＡＢＣ）、全角数字（１２３）　还有全角空格！";
        String text = "birds，yellow";
        String converted = convertToHalfWidth(text);
        System.out.println("原始文本: " + text);
        System.out.println("转换后: " + converted);
    }
}
