package tech.easyflow.ai.node.filegeneration;

import org.commonmark.Extension;
import org.commonmark.ext.gfm.tables.TablesExtension;
import org.commonmark.node.Node;
import org.commonmark.parser.Parser;
import org.commonmark.renderer.html.HtmlRenderer;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * Markdown 解析与 HTML 渲染支持。
 *
 * @author Codex
 * @since 2026-04-18
 */
@Component
public class MarkdownSupport {
    private final Parser parser;
    private final HtmlRenderer htmlRenderer;

    public MarkdownSupport() {
        List<Extension> extensions = List.of(TablesExtension.create());
        this.parser = Parser.builder()
                .extensions(extensions)
                .build();
        this.htmlRenderer = HtmlRenderer.builder()
                .extensions(extensions)
                .escapeHtml(true)
                .sanitizeUrls(true)
                .build();
    }

    /**
     * 解析 Markdown 文本。
     *
     * @param markdown Markdown 内容
     * @return AST 根节点
     */
    public Node parse(String markdown) {
        return parser.parse(markdown == null ? "" : markdown);
    }

    /**
     * 将 Markdown 渲染为安全 HTML 片段。
     *
     * @param markdown Markdown 内容
     * @return HTML 片段
     */
    public String renderHtml(String markdown) {
        return htmlRenderer.render(parse(markdown));
    }
}
