async function searchResults(keyword) {
    const regex = /<a href="([^"]+)">\s*<img src="([^"]+)"[^>]*>\s*<h3>([^<]+)<\/h3>/g;
    const results = [];
    try {
        const response = await fetchv2("https://animeyy.com/?act=ajax&code=search_manga&keyword=" + encodeURIComponent(keyword));
        const html = await response.text();

        let match;
        while ((match = regex.exec(html)) !== null) {
            let title = match[3].trim();
            title = title.replace(/&#39;/g, "'").replace(/&quot;/g, '"').replace(/&amp;/g, '&').replace(/&lt;/g, '<').replace(/&gt;/g, '>');
            const imageUrl = "https://animeyy.com/" + match[2].trim();
            const passthroughImage = "https://passthrough-worker.simplepostrequest.workers.dev/?simple=" + encodeURIComponent(imageUrl) + "&referer=https://animeyy.com/";
            results.push({
                title: title,
                image: passthroughImage,
                href: "https://animeyy.com" + match[1].trim()
            });
        }

        return JSON.stringify(results);
    } catch (err) {
        return JSON.stringify([{
            title: "Error",
            image: "Error",
            href: "Error"
        }]);
    }
}

async function extractDetails(url) {
    try {
        const response = await fetchv2(url);
        const html = await response.text();

        const aliasesMatch = html.match(/<strong>Alternative:<\/strong>\s*([^<]+)/);
        let aliases = aliasesMatch ? aliasesMatch[1].trim() : "N/A";
        aliases = aliases.replace(/&#39;/g, "'").replace(/&quot;/g, '"').replace(/&amp;/g, '&').replace(/&lt;/g, '<').replace(/&gt;/g, '>');

        const descMatch = html.match(/<div id="summary_shortened">([\s\S]*?)<\/div>/);
        let description = descMatch ? descMatch[1].trim() : "N/A";
        description = description.replace(/&#39;/g, "'").replace(/&quot;/g, '"').replace(/&amp;/g, '&').replace(/&lt;/g, '<').replace(/&gt;/g, '>');

        return JSON.stringify([{
            description: description,
            aliases: aliases,
            airdate: "N/A"
        }]);
    } catch (err) {
        return JSON.stringify([{
            description: "Error",
            aliases: "Error",
            airdate: "Error"
        }]);
    }
}

async function extractEpisodes(url) {
    const results = [];
    const episodesRegex = /<li class="wp-manga-chapter"><a href="([^"]+)">(\d+)<\/a>/g;
    try {
        const response = await fetchv2(url);
        const html = await response.text();

        let match;
        while ((match = episodesRegex.exec(html)) !== null) {
            results.push({
                href: "https://animeyy.com" + match[1].trim(),
                number: parseInt(match[2], 10)
            });
        }

        return JSON.stringify(results.reverse());
    } catch (err) {
        return JSON.stringify([{
            href: "Error",
            number: "Error"
        }]);
    }
}

async function extractStreamUrl(url) {
    try {
        const response = await fetchv2(url);
        const html = await response.text();

        const iframeMatch = html.match(/<iframe src="([^"]+)"/);
        if (iframeMatch) {
            const streamUrl = iframeMatch[1].replace('/embed/', '/anime/');
            return JSON.stringify({
                streams: [
                    {
                        title: "Server 1",
                        streamUrl: streamUrl,
                        headers: {
                            Referer: "https://www.animeyy.com/"
                        }
                    }
                ],
                subtitle: ""
            });
        } else {
            return JSON.stringify({
                streams: [],
                subtitle: ""
            });
        }
    } catch (err) {
        return JSON.stringify({
            streams: [],
            subtitle: ""
        });
    }
}
