<!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": ["EuroSport 1 1080"],
            "Eurosport 2": ["EuroSport 2 1080"],
            "M+ LaLiga TV (M54-O110)": ["M. LaLiga 1080P", "M. LaLiga 1080 MultiAudio", "M. LaLiga 720"],
            "M+ LaLiga TV UHD (M440 O111)": ["M. LaLiga 1080P", "M. LaLiga 1080 MultiAudio", "M. LaLiga 720"],
            "LaLiga TV M2": ["M. LaLiga 2 1080", "M. LaLiga 2 720"],
            "M+ LaLiga TV (M54-O110)": ["M. LaLiga 1080", "M. LaLiga 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 M2": ["M. LaLiga 2 720", "M. LaLiga 2 1080"],
            "LaLiga TV M3": ["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. Campeones 1080", "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',
            'DIRECTO',
            'directo',
            'Directo',
            'Play',
            'PLAY',
            'play',
            'PPV',
            'Regístrate',
            'acceder',
            'Acceder',
            '.com',
            '.es',
            'Web',
            'Dispositivos',
            'Orange',
            'Zapi',
            'Galicia',
            'Cataluña',
            'OneFootball',
            'Lite',
            '(País Vasco)',
            'Aragón',
            '7Play',
        ];

        // Canales específicos que queremos excluir
        const canalesExcluidos = [
            "NBA League Pass",
            "MAX",
            "Plaiz",
            "Canal por confirmar",
            "FEF TV",
            "GolStadium Premium",
            "Esport3 Web",
            "DAZN App Gratis",
            "EHF TV",
            "Barça One",
            "Amazon Prime Video",
            "FCF TV",
            "Real Betis TV",
            "RFEF",
            "CONCACAF GO",
            "LaLiga+",
            "LaLiga+ Plus",
            "GolStadium",
            "CMMPlay",
            "La Xarxa+",
            "FEB TV",
            "TV FootballClub",
            "FANSEA",
            "FANSEAT",
            "Fight Sports Max",
            "À Punt (C. Valenciana)",
            "TV5 Monde",
            "ElCanalDelFutbol",
            "RTP 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",
            "Telecinco",
            "UEFA TV",
            "TV Melilla",
            "La 8 Burgos",
            "IB3 (Baleares)",
            "Popular TV Murcia",
            "Betevé (Barcelona)",
            "7 TV Jaén",
            "Canal Sur",
            "TPA 1 (Asturias)",
            "TV Canaria",
            "Real Madrid TV",
            "Lleida Televisió",
            "À Punt Mèdia",
            "Red Bull TV",
            "Eurovision Sports TV"
        ];

        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 obtenerCompeticion = (fila) => {
                            const contenedor = fila.querySelector('.ajusteDoslineas');
                            if (!contenedor) return '';

                            // Obtener el texto del label (ahora buscando también dentro de enlaces)
                            const labelTitle = contenedor.querySelector('label')?.getAttribute('title');

                            // Buscar el span directamente en ajusteDoslineas
                            const spanTitle = contenedor.querySelector('span > span[title]')?.getAttribute('title');

                            // Combinar los títulos con un salto de línea si existen ambos
                            if (labelTitle && spanTitle) {
                                return `${labelTitle}<br>-<br>${spanTitle}`;
                                // return `${labelTitle}<br>${spanTitle}`;
                            }
                            return labelTitle || '';
                        };

                        const competicion = obtenerCompeticion(fila);
                        const canalesList = fila.querySelectorAll('.listaCanales li');
                        const canales = [];

                        // Obtener el evento (puede ser partido o evento individual)
                        let evento = '';
                        const eventoUnico = fila.querySelector('.eventoUnico');
                        if (eventoUnico) {
                            // Es un evento individual (como una carrera)
                            evento = eventoUnico.innerHTML;
                        } else {
                            // Es un partido con local y visitante
                            const local = fila.querySelector('.local span')?.getAttribute('title');
                            const visitante = fila.querySelector('.visitante span')?.getAttribute('title');
                            if (local && visitante) {
                                evento = `${local}<br>-<br>${visitante}`;
                            }
                        }

                        // Mantener el procesamiento original de canales con todos los filtros
                        canalesList.forEach(canal => {
                            const canalTitulo = canal.getAttribute('title');
                            if (canalTitulo && !debeExcluirCanal(canalTitulo)) {
                                canales.push(canalTitulo);
                            }
                        });

                        // Mostrar el evento si tiene hora, competición, evento (de cualquier tipo) y canales válidos
                        if (hora && competicion && evento && canales.length > 0) {
                            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 canales = fila.querySelector('td:nth-child(4)').innerText.split('\n');
                const columnaEnlaces = fila.querySelector('td:nth-child(5)');

                // Usar Set para almacenar enlaces únicos
                const enlacesSet = new Set();

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

                                // Asegurarse de comparar el nombre del canal, no el ID
                                if (canalEvento === nombre || subCanales.some(subcanal => nombre.includes(subcanal))) {
                                    // Crear un enlace clickeable con el nombre del canal y el ID de AceStream
                                    const enlace = `<a href="acestream://${contentId}" target="_blank">${nombre}</a>`;
                                    enlacesSet.add(enlace); // Usar Set.add en lugar de array.push
                                }
                            });
                            break; // Solo se busca una vez la coincidencia para cada canal
                        }
                    }
                });

                // Convertir el Set a Array y unir los enlaces con <br>
                const enlacesUnicos = Array.from(enlacesSet);
                columnaEnlaces.innerHTML = enlacesUnicos.length > 0 ? enlacesUnicos.join('<br>') : 'No disponible';
            });
        }


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

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