<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Lista M3U de Eventos</title>
    <style>
        :root {
            --background-color: #1a1a1a;
            --content-background: #2d2d2d;
            --text-color: #ffffff;
            --accent-color: #4CAF50;
            --accent-hover: #45a049;
        }

        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            background-color: var(--background-color);
            color: var(--text-color);
            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, sans-serif;
            line-height: 1.6;
            padding: 20px;
            min-height: 100vh;
        }

        .container {
            max-width: 1200px;
            margin: 0 auto;
            padding: 0 20px;
        }

        h1 {
            font-size: 2.5rem;
            text-align: center;
            margin-bottom: 1.5rem;
            font-weight: 600;
        }

        #estado-carga {
            text-align: center;
            margin: 1.5rem 0;
            font-size: 1.1rem;
            color: #a0a0a0;
        }

        .button-container {
            display: flex;
            justify-content: center;
            margin: 1rem 0;
        }

        button {
            background-color: var(--accent-color);
            color: white;
            border: none;
            padding: 12px 24px;
            border-radius: 6px;
            cursor: pointer;
            font-size: 1rem;
            font-weight: 500;
            transition: background-color 0.2s ease;
        }

        button:hover {
            background-color: var(--accent-hover);
        }

        #m3u-contenido {
            background-color: var(--content-background);
            border-radius: 8px;
            padding: 20px;
            white-space: pre-wrap;
            word-wrap: break-word;
            margin: 20px auto;
            font-family: 'Monaco', 'Consolas', monospace;
            font-size: 0.9rem;
            line-height: 1.5;
            overflow-x: auto;
            box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
        }

        /* Media Queries */
        @media screen and (max-width: 768px) {
            body {
                padding: 15px;
            }

            h1 {
                font-size: 1.75rem;
                margin-bottom: 1rem;
            }

            #estado-carga {
                font-size: 1rem;
                margin: 1rem 0;
            }

            #m3u-contenido {
                font-size: 0.85rem;
                padding: 15px;
                margin: 15px auto;
            }

            button {
                padding: 10px 20px;
                font-size: 0.9rem;
            }
        }

        @media screen and (max-width: 480px) {
            h1 {
                font-size: 1.5rem;
            }

            #m3u-contenido {
                font-size: 0.8rem;
                padding: 12px;
            }

            .container {
                padding: 0 10px;
            }
        }
    </style>
</head>

<body>
    <div class="container">
        <h1>Lista M3U de Eventos</h1>
        <div id="estado-carga">Iniciando la recuperación de datos...</div>
        <div class="button-container">
            <button id="copiar-datos">Copiar M3U</button>
        </div>
        <pre id="m3u-contenido"></pre>
    </div>

    <script>
        // [El código JavaScript se mantiene igual que en el original]
        const urls = [
            "https://ipfs.io/ipns/elcano.top",
            "https://ipfs.io/ipns/k51qzi5uqu5dgg9al11vomikugim0o1i3l3fxp3ym3jwaswmy9uz8pq4brg1u9"
        ];

        const estadoCarga = document.getElementById("estado-carga");
        const m3uContenido = document.getElementById("m3u-contenido");
        const botonCopiar = document.getElementById("copiar-datos");
        let eventos = [];

        function obtenerDatos() {
            estadoCarga.textContent = "Recuperando datos, por favor espera...";
            eventos = [];

            function fetchUrl(url) {
                return new Promise((resolve, reject) => {
                    const xhr = new XMLHttpRequest();
                    xhr.open('GET', url, true);
                    xhr.onload = function () {
                        if (xhr.status === 200) {
                            resolve(xhr.responseText);
                        } else {
                            reject(new Error(`Error al cargar ${url}`));
                        }
                    };
                    xhr.onerror = () => reject(new Error(`Error de red al cargar ${url}`));
                    xhr.send();
                });
            }

            function procesarUrls(urlsRestantes) {
                if (urlsRestantes.length === 0) {
                    mostrarM3U(eventos);
                    estadoCarga.textContent = eventos.length > 0
                        ? "Datos recuperados correctamente."
                        : "No se pudieron recuperar datos.";
                    return;
                }

                const url = urlsRestantes[0];
                fetchUrl(url)
                    .then(textoHTML => {
                        const parser = new DOMParser();
                        const doc = parser.parseFromString(textoHTML, "text/html");

                        const scriptContent = [...doc.scripts].find(script =>
                            script.textContent.includes("linksData")
                        );

                        if (scriptContent) {
                            const linksDataMatch = scriptContent.textContent.match(/const linksData = ({.*?});/s);
                            if (linksDataMatch) {
                                try {
                                    const linksData = JSON.parse(linksDataMatch[1]);
                                    linksData.links.forEach(link => {
                                        const url = link.url;
                                        const contentId = url.startsWith("acestream://")
                                            ? url.replace("acestream://", "")
                                            : null;

                                        if (contentId && !eventos.some(evento => evento.contentId === contentId)) {
                                            eventos.push({ nombre: link.name, contentId: contentId });
                                        }
                                    });
                                } catch (error) {
                                    console.error("Error parsing JSON:", error);
                                }
                            }
                        }

                        procesarUrls(urlsRestantes.slice(1));
                    })
                    .catch(error => {
                        console.error("Error al procesar URL:", error);
                        procesarUrls(urlsRestantes.slice(1));
                    });
            }

            procesarUrls(urls);
        }

        function generarM3U(eventos) {
            let m3u = '#EXTM3U\n';
            eventos.forEach(evento => {
                m3u += `#EXTINF:-1, group-title="Elcano.top",${evento.nombre}\nacestream://${evento.contentId}\n`;
            });
            return m3u;
        }

        function mostrarM3U(eventos) {
            const m3uString = generarM3U(eventos);
            m3uContenido.textContent = m3uString;
        }

        function copiarDatosM3U() {
            const m3u = generarM3U(eventos);
            const tempTextArea = document.createElement('textarea');
            tempTextArea.value = m3u;
            document.body.appendChild(tempTextArea);
            tempTextArea.select();

            try {
                document.execCommand('copy');
                alert('M3U copiado al portapapeles');
            } catch (err) {
                console.error('Error al copiar el M3U:', err);
                prompt('Copia el M3U:', m3u);
            }

            document.body.removeChild(tempTextArea);
        }

        botonCopiar.addEventListener("click", copiarDatosM3U);
        obtenerDatos();
    </script>
</body>
</html>