<!DOCTYPE html>
<html lang="es">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Andrenalina</title>
    <style>
        body {
            text-align: center;
            background-color: #1a1a1a;
            color: #ffffff;
            transition: background-color 0.5s, color 0.5s;
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 20px;
            display: flex;
            flex-direction: column;
            align-items: center;
            min-height: 100vh;
        }

        table {
            width: 100%;
            border-collapse: collapse;
            margin: 20px 0;
            font-size: 1rem;
            text-align: left;
        }

        th,
        td {
            padding: 10px;
            border: 1px solid #ddd;
        }

        th {
            background-color: rgb(226, 59, 13);
        }

        .loading {
            text-align: center;
            font-size: 1.2rem;
            color: #ff4d4d;
        }

        .tabla-acestream {
            margin-top: 40px;
            text-align: center;
            z
        }

        .tabla-Eventos {
            margin-top: 40px;
            text-align: center;
        }

        }

        h1 {
            text-align: center;
            color: white;
        }

        a {
            text-align: center;
            color: #ff4d4d;
        }

        hr {
            border-color: #404040;
            margin: 15px 0;
        }
    </style>
</head>

<body>
    <h1>/⁠╲⁠/⁠\⁠╭⁠(⁠•⁠‿⁠•⁠)⁠╮⁠/⁠\⁠╱⁠\</h1>
    <h1>Andrenalina</h1>
    <h1>by TokyoGhoull</h1>
    <div id="loading" class="loading">Cargando datos...</div>
    <table id="tablaEventos" class="tabla-Eventos" style="display: none;">
        <thead>
            <tr>
                <th>Hora</th>
                <th>Competición</th>
                <th>Evento</th>
                <th>Canales</th>
                <th>Eventos Acestream</th>
            </tr>
        </thead>
        <tbody></tbody>
    </table>

    <!-- Segunda tabla para AceStream -->
    <!-- <h2>Eventos Acestream</h2> -->
    <table id="tablaAcestream" class="tabla-acestream" style="display: none;">
        <thead>
            <tr>
                <th>Nombre</th>
                <th>Content ID</th>
                <th>Eventos</th>
            </tr>
        </thead>
        <tbody></tbody>
    </table>

    <script>
        const futbolUrl = 'https://www.futbolenlatv.es/deporte';
        const acestreamUrls = [
            "https://ipfs.io/ipns/elcano.top",
            "https://ipfs.io/ipns/k51qzi5uqu5dgg9al11vomikugim0o1i3l3fxp3ym3jwaswmy9uz8pq4brg1u9",
            "htttps://bafybeihaak6jp7c6y3weyynkfruefwtgchvx2uuppmtts775k4z7kyw4ny.ipfs.dweb.link"
        ];

        // Mapeo de canales a sus correspondientes identificadores AceStream
        const equivalenciasCanales = {
            "La 1 TVE": ["La1", "La1 UHD"],
            "Teledeporte": ["tdp 1080"],
            "*": ["EuroSport 1 1080"],
            "Eurosport 2": ["EuroSport 2 1080"],
            "M+ LaLiga TV (M54-O110)": ["M. LaLiga 1080P", "M. LaLiga 1080 MultiAudio", "M. LaLiga 720"],
            "LaLiga TV M2": ["M. LaLiga 2 1080", "M. LaLiga 2 720"],
            "M+ LaLiga TV 2 (M57 O112)": ["M. LaLiga 2 1080", "M. LaLiga 2 720"],
            "M+ LaLiga TV 3 (M167 O270)": ["M. LaLiga 3 1080", "M. LaLiga 3 720"],
            "M+ LaLiga TV 4 (M168 O271)": ["M. LaLiga 4 1080", "M. LaLiga 4 720"],
            "LaLiga TV M3": ["M. LaLiga 3 720", "M. LaLiga 3 1080"],
            "LaLiga TV M3 (3)": ["M. LaLiga 3 720", "M. LaLiga 3 1080"],
            "LaLiga TV M4": ["M. LaLiga 4 1080", "M. LaLiga 4 720"],
            "LaLiga TV M5": ["M. LaLiga 5 1080", "M. LaLiga 5 720"],
            "LaLiga TV M6": ["M. LaLiga 6 1080", "M. LaLiga 6 720"],

            "LaLiga TV Bar": ["La Liga BAR 1080", "La Liga BAR 720"],

            "LALIGA TV Hypermotion (M56 O 119)": ["LaLiga Smartbank 1080", "LaLiga Smartbank 720"],
            "LALIGA TV Hypermotion 2 (M59 O120)": ["LaLiga Smartbank 2 1080", "LaLiga Smartbank 2 720"],
            "*": ["LaLiga Smartbank 3"],

            "Movistar Plus+ (M7)": ["M.Plus 1080", "M.Plus 720"],
            "Movistar Plus+ 2 (M176)": ["M.Plus 2 1080", "M.Plus 2 720"],

            "M+ Copa del Rey (M52 O107)": ["Copa 1080", "Copa 1080 plus", "Copa 1080 MultiAudio", "Copa 1080", "Copa 720"],

            "M+ Vamos (8 y 53)": ["#Vamos 1080", "#Vamos 720"],
            "M+ #Vamos Bar (304)": ["#Vamos Bar 1080", "#Vamos Bar 720"],
            "M+ #Vamos Bar 2 (305)": ["#Vamos Bar 2 1080", "#Vamos Bar 2 720"],

            "M+ Ellas Vamos (66)": ["#Ellas 1080"],

            "M+ Deportes (63)": ["M. Deportes 1080", "M. Deportes 720"],
            "M+ Deportes 2 (64)": ["M. Deportes 2 1080", "M. Deportes 2 720"],
            "M+ Deportes 3 (65)": ["M. Deportes 3 1080", "M. Deportes 3 720"],
            "M+ Deportes 4 (191)": ["M. Deportes 4 1080", "M. Deportes 4 720"],
            "M+ Deportes 5 (192)": ["M. Deportes 5 1080", "M. Deportes 5 720"],
            "M+ Deportes 6 (193)": ["M. Deportes 6 1080", "M. Deportes 6 720"],
            "M+ Deportes 7 (194)": ["M. Deportes 7 1080", "M. Deportes 7 720"],

            "M+ Liga de Campeones": ["M.L. Campeones1080", "M.L. Campeones 720", "M.L. Campeones 1080 MultiAudio"],
            "M+ Liga de Campeones (M60 O115)": ["M.L. Campeones1080", "M.L. Campeones 720", "M.L. Campeones 1080 MultiAudio"],
            "M+ Liga de Campeones 2 (M61 O116)": ["M.L. Campeones 2 SD", "M.L. Campeones 2 1080", "M.L. Campeones 2 720"],
            "M+ Liga de Campeones 3 (M62 O118)": ["M.L. Campeones 3 SD", "M.L. Campeones 3 1080", "M.L. Campeones 3 720"],
            "M+ Liga de Campeones 4 (M180 O276)": ["M.L. Campeones 4 SD", "M.L. Campeones 4 1080", "M.L. Campeones 4 720"],
            "M+ Liga de Campeones 5 (M182 O277)": ["M.L. Campeones 5 SD", "M.L. Campeones 5 1080", "M.L. Campeones 5 720"],
            "M+ Liga de Campeones 6 (M183 O278)": ["M.L. Campeones 6 SD", "M.L. Campeones 6 1080", "M.L. Campeones 6 720"],
            "M+ Liga de Campeones 7 (M184 O279)": ["M.L. Campeones 7 SD", "M.L. Campeones 7 1080", "M.L. Campeones 7 720"],
            "M+ Liga de Campeones 8 (M184 O280)": ["M.L. Campeones 8 SD", "M.L. Campeones 8 1080", "M.L. Campeones 8 720"],
            "M+ Liga de Campeones 9 (M185 O281)": ["M.L. Campeones 9 SD", "M.L. Campeones 9 1080", "M.L. Campeones 9 720"],
            "M+ Liga de Campeones 10 (M186 O282)": ["M.L. Campeones 10 SD", "M.L. Campeones 10 1080", "M.L. Campeones 10 720"],
            "M+ Liga de Campeones 11 (M187 O283)": ["M.L. Campeones 11 SD", "M.L. Campeones 11 1080", "M.L. Campeones 11 720"],
            "M+ Liga de Campeones 12 (M 188 O284)": ["M.L. Campeones 12 SD", "M.L. Campeones 12 1080", "M.L. Campeones 12 720"],
            "M+ Liga de Campeones 13 (M189 O285)": ["M.L. Campeones 13 SD", "M.L. Campeones 13 1080", "M.L. Campeones 13 720"],
            "M+ Liga de Campeones 14 (O286)": ["M.L. Campeones 14 1080", "M.L. Campeones 14 720", "M.L. Campeones 14 SD"],
            "M+ Liga de Campeones 15 (O287)": ["M.L. Campeones 15 SD", "M.L. Campeones 15 1080", "M.L. Campeones 15 720"],
            "M+ Liga de Campeones 16 (O288)": ["M.L. Campeones 16 SD", "M.L. Campeones 16 1080", "M.L. Campeones 16 720"],
            "M+ Liga de Campeones 17 (O289)": ["M.L. Campeones 17 SD", "M.L. Campeones 17 1080", "M.L. Campeones 17 720"],
            "M+ Liga de Campeones 18": ["M.L. Campeones 18 SD", "M.L. Campeones 18 1080", "M.L. Campeones 18 720"],
            "M+ Liga de Campeones 19": ["M.L. Campeones 19 SD", "M.L. Campeones 19 1080", "M.L. Campeones 19 720"],

            "Movistar Golf (M67)": ["M. Golf 1080", "M. Golf 720"],
            "Movistar Golf 2 (M68)": ["M. Golf2 1080", "M. Golf2 720"],

            "DAZN 1 (M70)": ["DAZN 1 1080", "DAZN 1 720"],
            "DAZN 1 Bar (Movistar-148)": ["DAZN 1 Bar 1080", "DAZN 1 Bar 720"],
            "DAZN 2 (M71)": ["DAZN 2 1080", "DAZN 2 720"],
            "DAZN 2 Bar (Movistar-149)": ["DAZN 2 Bar 1080", "DAZN 2 Bar 720"],
            "DAZN 3 (M196)": ["DAZN 3 1080", "DAZN 3 720"],
            "DAZN 4 (M197)": ["DAZN 4 1080", "DAZN 4 720"],

            "DAZN F1 (M69)": ["DAZN F1 Multicamara (Fórmula 1)", "DAZN F1 1080 (Fórmula 1)", "DAZN F1 720 (Fórmula 1)"],

            "DAZN LaLiga (M55 O113)": ["DAZN LaLiga 1080 MultiAudio", "DAZN LaLiga 720"],
            "DAZN LaLiga 2 (M58 O274)": ["DAZN LaLiga 2 1080 MultiAudio", "DAZN LaLiga 2 720"],

            "*": ["PPVP 1"],
            "*": ["PPVP 2"],
            "*": ["PPVP 3"],
        };

        // Filtros genéricos basados en palabras clave
        const filtrosGenericos = [
            'YouTube',
            'Twitch',
            'Twitter',
            'Facebook',
            'Web Directo',
            '* SIN TV EN DIRECTO *',
            'Play',
            'PPV',
            'Regístrate',
            'acceder',
            'Acceder',
            '.com',
            '.es',
            'Web',
            'Dispositivos'

        ];

        // Canales específicos que queremos excluir
        const canalesExcluidos = [
            "Movistar+ Lite",
            "NBA League Pass",
            "MAX",
            "Plaiz",
            "Canal por confirmar",
            "FEF TV",
            "AFA Play",
            "GolStadium Premium",
            "Esport3 Web",
            "DAZN App Gratis",
            "EHF TV",
            "Esport3 (Cataluña)",
            "Barça One",
            "TVG2 (Galicia)",
            "ETB4 (País Vasco)",
            "Amazon Prime Video",
            "À Punt Mèdia",
            "Aragón Deporte",
            "Aragón TV",
            "FCF TV",
            "Real Betis TV",
            "RFEF",
            "CONCACAF GO",
            "Zapi Teleporte",
            "LaLiga+",
            "LaLiga+ Plus",
            "OneFootball",
            "Real Madrid TV",
            "GOL PLAY",
            "GolStadium",
            "CMMPlay",
            "La Xarxa+",
            "FEB TV",
            "TV FootballClub",
            "FANSEA",
            "FANSEAT",
            "Fight Sports Max",
            "À Punt (C. Valenciana)",
            "TV5 Monde",
            "ElCanalDelFutbol",
            "RTP Internacional",
            "RTP Play Internacional",
            "RCN Nuestra Tele",
            "RFAF TV",
            "NWSL+",
            "7 TV Linares",
            "La Otra (Madrid)",
            "FIFA+",
            "Extv",
            "101 TV (Málaga)",
            "Real Avilés Industrial TV",
            "VivamóvilTV",
            "Telecartagena",
            "UEFA TV",
            "TV Melilla",
            "La 8 Burgos",
            "IB3 (Baleares)",
            "Popular TV Murcia",
            "Betevé (Barcelona)",
            "7 TV Jaén",
            "Canal Sur",
            "ETB1 (País Vasco)",
            "TVG (Galicia)",
            "TPA 1 (Asturias)",
            "TV Canaria"
        ];

        function debeExcluirCanal(canalTitulo) {
            // Comprobar si el canal está en la lista de excluidos específicos
            if (canalesExcluidos.some(canal => canalTitulo.includes(canal))) {
                return true;
            }

            // Comprobar si el canal contiene alguna palabra clave genérica
            if (filtrosGenericos.some(filtro => canalTitulo.includes(filtro))) {
                return true;
            }

            return false;
        }



        async function cargarDatosFutbol() {
            const tablaEventos = document.getElementById('tablaEventos');
            const tbodyEventos = tablaEventos.querySelector('tbody');
            const loading = document.getElementById('loading');

            try {
                const respuesta = await fetch(futbolUrl);
                const texto = await respuesta.text();
                const parser = new DOMParser();
                const doc = parser.parseFromString(texto, 'text/html');
                const tablaPrincipal = doc.querySelector('table.tablaPrincipal.detalleVacio');

                if (!tablaPrincipal) {
                    loading.textContent = 'No se encontró información.';
                    return;
                }

                const filas = tablaPrincipal.querySelectorAll('tr');
                let fechaActual = '';

                filas.forEach(fila => {
                    if (fila.classList.contains('cabeceraTabla')) {
                        const fechaTexto = fila.querySelector('td[colspan="5"]').innerText;
                        const match = fechaTexto.match(/(\d{2}\/\d{2}\/\d{4})/);
                        if (match) fechaActual = match[1];
                    } else {
                        const hora = fila.querySelector('.hora')?.innerText.trim();
                        const competicion = fila.querySelector('.ajusteDoslineas label')?.getAttribute('title');
                        const local = fila.querySelector('.local span')?.getAttribute('title');
                        const visitante = fila.querySelector('.visitante span')?.getAttribute('title');
                        const canalesList = fila.querySelectorAll('.listaCanales li');
                        const canales = [];

                        // Modificación de la parte donde se procesan los canales en el código original
                        canalesList.forEach(canal => {
                            const canalTitulo = canal.getAttribute('title');
                            if (canalTitulo && !debeExcluirCanal(canalTitulo)) {
                                canales.push(canalTitulo);
                            }
                        });

                        if (hora && competicion && local && visitante && canales.length > 0) {
                            const evento = `${local}<br>-<br>${visitante}`;
                            const row = document.createElement('tr');
                            row.innerHTML = `
                                <td>${hora}</td>
                                <td>${competicion}</td>
                                <td>${evento}</td>
                                <td>${canales.join('<br>')}</td>
                                <td>-</td>
                            `;
                            tbodyEventos.appendChild(row);
                        }
                    }
                });

                loading.style.display = 'none';
                tablaEventos.style.display = 'table';
            } catch (error) {
                loading.textContent = 'Error al cargar los datos.';
                console.error(error);
            }
        }

        async function cargarDatosAcestream() {
            const tablaAcestream = document.getElementById('tablaAcestream');
            const tbodyAcestream = tablaAcestream.querySelector('tbody');

            const enlacesAcestream = [];

            for (const url of acestreamUrls) {
                try {
                    const respuesta = await fetch(url);
                    const textoHTML = await respuesta.text();
                    const parser = new DOMParser();
                    const doc = parser.parseFromString(textoHTML, "text/html");

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

                    const linksDataMatch = scriptContent.textContent.match(/const linksData = ({.*?});/s);
                    if (!linksDataMatch) continue;

                    const linksData = JSON.parse(linksDataMatch[1]);
                    linksData.links.forEach(link => {
                        const contentId = link.url.startsWith("acestream://") ? link.url.replace("acestream://", "") : null;

                        if (contentId && !enlacesAcestream.some(e => e.contentId === contentId)) {
                            enlacesAcestream.push({ nombre: link.name.trim(), contentId });
                        }
                    });
                } catch (error) {
                    console.error("Error al obtener Eventos Acestream:", error);
                }
            }

            enlacesAcestream.forEach(enlace => {
                const row = document.createElement('tr');
                row.innerHTML = `
                    <td>${enlace.nombre}</td>
                    <td>${enlace.contentId}</td>
                    <td><a href="acestream://${enlace.contentId}" target="_blank">${enlace.nombre}</a></td>
                `;
                tbodyAcestream.appendChild(row);
            });

            tablaAcestream.style.display = 'table';
        }

        function asociarCanalesYEnlaces() {
            const tablaEventos = document.getElementById('tablaEventos');
            const filasEventos = tablaEventos.querySelectorAll('tbody tr');
            const tablaAcestream = document.getElementById('tablaAcestream');
            const filasAcestream = tablaAcestream.querySelectorAll('tbody tr');

            filasEventos.forEach(fila => {
                const columnaCanales = fila.querySelector('td:nth-child(4)');
                const canales = columnaCanales.innerText.split('\n');
                const columnaEnlaces = fila.querySelector('td:nth-child(5)');

                const enlaces = [];
                const canalesRestantes = [];

                canales.forEach(canalEvento => {
                    let canalEncontrado = false;

                    // Buscar coincidencia en equivalenciasCanales
                    for (const [canalPrincipal, subCanales] of Object.entries(equivalenciasCanales)) {
                        if (canalEvento === canalPrincipal || subCanales.includes(canalEvento)) {
                            // Buscar Eventos Acestream que coincidan
                            filasAcestream.forEach(filaAcestream => {
                                const nombre = filaAcestream.querySelector('td:nth-child(1)').innerText;
                                const contentId = filaAcestream.querySelector('td:nth-child(2)').innerText;

                                if (canalEvento === nombre || subCanales.some(subcanal => nombre.includes(subcanal))) {
                                    const enlace = `<a href="acestream://${contentId}" target="_blank">${nombre}</a>`;
                                    enlaces.push(enlace);
                                    canalEncontrado = true;
                                }
                            });
                            break;
                        }
                    }

                    // Si el canal no se encontró en equivalenciasCanales o no tiene enlace Acestream,
                    // lo mantenemos en la lista de canales
                    if (!canalEncontrado) {
                        canalesRestantes.push(canalEvento);
                    }
                });

                // Actualizar la columna de canales solo con los que no tienen equivalencia
                columnaCanales.innerHTML = canalesRestantes.join('<br>');

                // Actualizar la columna de enlaces
                columnaEnlaces.innerHTML = enlaces.length > 0 ? enlaces.join('<br>') : 'No disponible';
            });
        }


        async function main() {
            await cargarDatosFutbol();
            await cargarDatosAcestream();
            await asociarCanalesYEnlaces();
        }

        main();
    </script>
</body>

</html>