package org.jk.rag.utils;

import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.nio.charset.StandardCharsets;

/**
 * Markdown 文件生成工具类
 */
public class MarkdownGenerator {

    /**
     * 生成 Markdown 内容并转为 MultipartFile 对象
     * @param mdContent Markdown 内容字符串（符合 MD 语法）
     * @param fileName  上传的文件名（需以 .md 结尾，如 "test_2025.md"）
     * @return MultipartFile 对象（可直接传入 upload 方法）
     * @throws IllegalArgumentException 参数校验异常
     */
    public static MultipartFile generateMdMultipartFile(String mdContent, String fileName) {
        // 1. 参数校验
        if (mdContent == null || mdContent.isEmpty()) {
            throw new IllegalArgumentException("Markdown 内容不能为空");
        }
        if (fileName == null || fileName.isEmpty() || !fileName.endsWith(".md")) {
            throw new IllegalArgumentException("文件名必须以 .md 结尾（如：test.md）");
        }

        // 2. 将 Markdown 字符串转为 UTF-8 字节数组
        byte[] mdBytes = mdContent.getBytes(StandardCharsets.UTF_8);

        // 3. 构建 MockMultipartFile（核心：模拟 MultipartFile）
        // 参数说明：name(表单字段名)、originalFilename(原始文件名)、contentType(文件类型)、inputStream/字节数组
        return new MockMultipartFile(
            "file",          // 表单字段名（需和 upload 方法接收的参数名匹配，若方法参数是 MultipartFile file，则填 "file"）
            fileName,        // 原始文件名（如 "test.md"）
            "text/markdown", // 文件类型（Markdown 对应 MIME 类型）
            mdBytes          // Markdown 字节数组
        );
    }

    public static void main(String[] args) {
        // 构造包含 <tr></tr> 表格标签的 Markdown 内容
        String mdContent = "# 测试表格\n" +
            "<table>\n" +
            "  <tr>\n" +
            "    <th>姓名</th>\n" +
            "    <th>年龄</th>\n" +
            "  </tr>\n" +
            "  <tr>\n" +
            "    <td>张三</td>\n" +
            "    <td>25</td>\n" +
            "  </tr>\n" +
            "</table>";

        // 调用方法生成 MockMultipartFile
        MultipartFile multipartFile = generateMdMultipartFile(mdContent, "test-table.md");

        // 读取 MockMultipartFile 内容，验证 <tr></tr> 是否存在
        try {
            String content = new String(multipartFile.getBytes(), StandardCharsets.UTF_8);
            System.out.println("生成的文件内容：\n" + content);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


}
