package com.yinlihupo.enlish.service.utils;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class StringToPlanMapUtil {

    public static Map<String, String> parseTextToMap(String text) {
        // 使用 LinkedHashMap 保持插入顺序
        Map<String, String> map = new LinkedHashMap<>();

        // 正则表达式：匹配行首的 **Key:** 格式
        Pattern headerPattern = Pattern.compile("^\\s*\\*\\*(.+?):\\*\\*\\s*(.*)");

        String currentKey = null;
        StringBuilder currentValue = new StringBuilder();

        try (Scanner scanner = new Scanner(text)) {
            while (scanner.hasNextLine()) {
                String line = scanner.nextLine();
                Matcher matcher = headerPattern.matcher(line);

                if (matcher.matches()) {
                    // 如果发现新的 Header

                    // 1. 保存上一个 Key-Value 对（如果存在）
                    if (currentKey != null) {
                        // 修改处：在存入 Map 前，调用 cleanMdBold 去除粗体语法
                        map.put(currentKey, cleanMdBold(currentValue.toString()));
                    }

                    // 2. 更新当前的 Key
                    currentKey = matcher.group(1).trim();

                    // 3. 重置 StringBuilder
                    currentValue = new StringBuilder();
                    String remainingText = matcher.group(2);
                    if (!remainingText.isEmpty()) {
                        currentValue.append(remainingText).append("\n");
                    }
                } else {
                    // 如果不是 Header 行，追加到当前 Value 中
                    if (currentKey != null) {
                        currentValue.append(line).append("\n");
                    }
                }
            }

            // 循环结束后，保存最后一个 Key-Value 对
            if (currentKey != null) {
                // 修改处：同样在最后存入时去除粗体语法
                map.put(currentKey, cleanMdBold(currentValue.toString()));
            }
        }

        return map;
    }

    /**
     * 辅助方法：去除字符串两端的空白以及内部的 Markdown 粗体符号 (**)
     */
    private static String cleanMdBold(String text) {
        if (text == null) {
            return "";
        }
        // 1. 替换掉所有的 ** 符号
        // 2. 去除首尾空白
        return text.replace("**", "").trim();
    }
}