package com.test.bijihoudaun.util;

import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.List;
import java.util.ArrayList;

/**
 * Markdown图片提取工具类
 * 用于从Markdown文本中提取图片文件名
 */
public class MarkdownImageExtractor {

    // 优化：预编译正则表达式，避免每次调用都编译
    private static final Pattern IMAGE_FILENAME_PATTERN = Pattern.compile(
            "!\\[.*?\\]\\([^)]*?([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}\\.[a-zA-Z0-9]+)\\)"
    );
    
    // 优化：预编译URL匹配正则
    private static final Pattern IMAGE_URL_PATTERN = Pattern.compile(
            "!\\[.*?\\]\\(([^)]+)\\)"
    );

    /**
     * 从Markdown内容中提取图片文件名
     * 支持各种URL格式:
     * - 绝对URL: http://example.com/path/uuid.png
     * - 相对URL: /path/uuid.png
     * - 协议相对URL: //example.com/path/uuid.png
     *
     * @param markdownContent 包含图片的Markdown文本
     * @return 图片文件名列表
     */
    public static List<String> extractImageFilenames(String markdownContent) {
        if (markdownContent == null || markdownContent.isEmpty()) {
            return new ArrayList<>();
        }

        // 使用预编译的正则表达式
        Matcher matcher = IMAGE_FILENAME_PATTERN.matcher(markdownContent);

        List<String> filenames = new ArrayList<>();
        while (matcher.find()) {
            filenames.add(matcher.group(1));
        }

        return filenames;
    }

    /**
     * 检查Markdown内容中是否包含指定的图片文件名
     *
     * @param markdownContent Markdown文本
     * @param filename 要查找的文件名
     * @return 是否包含该文件名
     */
    public static boolean containsImage(String markdownContent, String filename) {
        if (markdownContent == null || filename == null) {
            return false;
        }

        return extractImageFilenames(markdownContent).contains(filename);
    }

    /**
     * 从Markdown内容中提取图片URL
     *
     * @param markdownContent 包含图片的Markdown文本
     * @return 图片URL列表
     */
    public static List<String> extractImageUrls(String markdownContent) {
        if (markdownContent == null || markdownContent.isEmpty()) {
            return new ArrayList<>();
        }

        // 使用预编译的正则表达式
        Matcher matcher = IMAGE_URL_PATTERN.matcher(markdownContent);

        List<String> urls = new ArrayList<>();
        while (matcher.find()) {
            urls.add(matcher.group(1));
        }

        return urls;
    }
}
