

// Actualiza la hora cada segundo (1000 milisegundos)
//setInterval(actualizarHora, 1000);
// Llama a la función una vez para mostrar la hora inmediatamente al cargar la página
//actualizarHora();

function setPainSliderValue(eva) {
    const painSlider = document.getElementById("painSlider");
    const painValue = document.getElementById("painValue");
    // Establece el valor del slider
    painSlider.value = eva;
    // Actualiza el valor mostrado
    painValue.textContent = "MARCAR EL DOLOR: " + eva; //Valor: " + eva;
}

function updatePainValue(value) {
    let eva = Math.round(value);
    const painValue = document.getElementById("painValue");
    painValue.textContent = "MARCAR EL DOLOR: " + eva; //"Valor: " + eva;
    localStorage.setItem("eva", eva);
}

function actualizarHora() {
    const ahora = new Date();
    //const hora = ahora.toLocaleTimeString(); // Obtiene la hora en formato local
    const hora = ahora.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' });
    //const hora = ahora.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }); // Obtiene la hora formateada a horas y minutos
    document.getElementById("minutero").textContent = hora; // Actualiza el contenido del elemento con la hora actual
}

////////////////////////////////
function openNav() {
    //document.getElementById("mySidenav").style.width = "200px";
}

function closeNav() {
    //document.getElementById("mySidenav").style.width = "0";
}
/////////////////////////////////////////////////////
function linealArt() {
    ;
    window.open('../prem/lineal.html', '_self');
}

function popArt() {
    ;
    window.open('../prem/popart.html', '_self');
}

function cubismoArt() {
    ;
    window.open('../prem/cubismo.html', '_self');
}

function impresionArt() {
    ;
    window.open('../prem/impresion.html', '_self');
}
function encuesta() {

    let tmp = localStorage.getItem("nameEjercicios");
    if (tmp) window.open('./encuesta.html', '_self');
}

function chartPdf() {
    if (usernamepdf === "fisio") {
        alert("Este PDF es genérico, no esta activa esta función. Gracias")
    }
    else {
        let tmp = localStorage.getItem("nameEjercicios");
        if (tmp) window.open('./adherencia.html', '_self');
    }
}

function actualizarSeleccion() {
    let imagenes = localStorage.getItem('pdfEjercicios');
    if (imagenes) {
        let miCheckbox = document.getElementById("miCheckbox");
        let imageLinks = [];
        imageLinks = imagenes.split(",");
        if (miCheckbox.checked) {
            for (let i = 1; i < imageLinks.length; i++) {
                let findTmp = imageLinks[i]
                let numReg = findTmp.slice(0, 3);
                let numRegPos = numReg[2];
                console.info(numRegPos);
                if (parseInt(numRegPos) < 9) {
                    const imgElement = document.getElementById(imageLinks[i]); //'img' + i.toString());
                    // Alterna entre las clases de borde cuadrado y redondeado
                    if (imgElement.classList.contains("img-square-border")) {
                        imgElement.classList.remove("img-square-border");
                        imgElement.classList.add("img-rounded-border-si");
                    }
                }
            }
        }
        else {
            for (let i = 1; i < imageLinks.length; i++) {
                let findTmp = imageLinks[i]
                let numReg = findTmp.slice(0, 3);
                let numRegPos = numReg[2];
                console.info(numRegPos);
                if (parseInt(numRegPos) < 9) {
                    const imgElement = document.getElementById(imageLinks[i]); //'img' + i.toString());
                    // Alterna entre las clases de borde cuadrado y redondeado
                    if (imgElement.classList.contains("img-rounded-border-si")) {
                        imgElement.classList.remove("img-rounded-border-si");
                        imgElement.classList.add("img-square-border");
                    }
                }
            }
        }
    }
}

function actualizarTiempoBase(valor) {
    // Actualizar la variable tiempoBase
    const tiempoBase = parseInt(valor, 10);

    // Guardar en localStorage
    localStorage.setItem('tiempoBase', tiempoBase);

    console.log(`Tiempo base seleccionado: ${tiempoBase} minuts`);
}

async function viewImages(imageLinks) {
    let origen = localStorage.getItem("origen");
    let imageGrid = null;
    if (origen === "PDF") imageGrid = document.getElementById('image-gridpdf');
    if (origen === "DQR") imageGrid = document.getElementById('image-gridqr');
    if (origen === "FQR") imageGrid = document.getElementById('image-gridcon');
    // Iteramos el array y añadimos cada imagen al contenedor
    let returToOpen = localStorage.getItem("returToOpen");
    console.info(returToOpen)
    if (returToOpen === "rhb" || returToOpen === "ias") deleteAllItems();
    for (let i = 1; i < imageLinks.length; i++) {
        ///////////////////////////////////
        let findTmp = imageLinks[i]
        let numReg = findTmp.slice(0, 3);
        let numRegPos = numReg[2];
        console.info(numRegPos);
        if (parseInt(numRegPos) < 9) {
            ///////////////////////////////////////
            const gridItem = document.createElement('div');
            gridItem.className = 'grid-item';

            const anchor = document.createElement('a');
            anchor.href = "./openvideo.html?" + "," + imageLinks[i];

            const imgElement = document.createElement('img');
            imgElement.id = imageLinks[i]; //'img' + i.toString();
            const miCheckbox = document.getElementById("miCheckbox");
            if (miCheckbox.checked) {
                imgElement.className = "img-rounded-border-si"; // Inicialmente cuadrada
            }
            else {
                imgElement.className = "img-square-border"; // Inicialmente cuadrada
            }
            imgElement.src = servidorURL + "/assets/cstimage/" + imageLinks[i];

            // Añadir evento click para alternar el estilo de borde
            imgElement.addEventListener('click', function (event) {
                event.preventDefault(); // Prevenir la redirección del enlace al hacer clic en la imagen
                // Alterna entre las clases de borde cuadrado y redondeado
                if (imgElement.classList.contains("img-square-border")) {
                    imgElement.classList.remove("img-square-border");
                    imgElement.classList.add("img-rounded-border-si");
                } else {
                    imgElement.classList.remove("img-rounded-border-si");
                    imgElement.classList.add("img-square-border");
                }
            });

            anchor.appendChild(imgElement);
            gridItem.appendChild(anchor);
            imageGrid.appendChild(gridItem);
            //console.info('img' + i.toString())            
        }
        else {
            let name = imageLinks[i];

            let nameok = name.slice(8, name.length - 4)
            nameok = nameok.replace("_", " ");
            let link = servidorURL + "/assets/cstimage/" + imageLinks[i];
            let tmpNom = imageLinks[i]
            let exec = servidorURL + "/assets/cstvideo/" + tmpNom.substr(0, 7) + ".txt";
            let src = link;
            let alt = nameok;
            console.info(imageLinks[i]);

            if ((returToOpen === "rhb" || returToOpen === "ias") && typeof addItem === 'function') addItem(nameok, link, src, alt, exec);
        }
    }

}
function deleteAllItems() {
    const sidenavItems = document.getElementById('sidenav-items');
    if (!sidenavItems) return;
    while (sidenavItems.firstChild) {
        sidenavItems.removeChild(sidenavItems.firstChild);
    }
}
async function gotoImagenes(imagenes) {
    console.info(imagenes)
    //let num = imagenes.split("?");

    //let nameEjercicios = imagenes.slice(37, imagenes.length);
    let nameEjercicios = imagenes; //imagenes.slice(0, imagenes.length);

    //console.info(nameEjercicios)
    let mainMenus = JSON.parse(localStorage.getItem("ClaveCreator"));
    console.info(mainMenus)
    let arrayTmp = []
    arrayTmp = nameEjercicios.split(",");

    let arrname = arrayTmp[0];

    const _qi = arrname.indexOf('?'), _hi = arrname.indexOf('#');
    usernamepdf = (_qi !== -1 && _hi !== -1) ? arrname.slice(_qi + 1, _hi) : arrname.slice(37, 42);
    console.info(usernamepdf)

    let nameTmp = "";
    console.info(arrayTmp)
    if (arrayTmp.length > 1) {
        //nombrePdf = arrayTmp[0];
        for (let i = 1; i < arrayTmp.length; i++) {
            let nImag = mainMenus.findIndex(item => item.ordenOri == arrayTmp[i]);
            if (nImag === -1) continue; // imagen borrada, se omite
            arrayTmp[i] = mainMenus[nImag].titulo;
            nameTmp = nameTmp + "," + arrayTmp[i]
        }
        //console.info(arrayTmp)
        nameEjercicios = nameTmp; //nameTmp.slice(0, nameTmp.length - 1)
        //console.info(nameEjercicios)
        //imagenes = imagenes.slice(0, 36) + nameEjercicios
    }
    localStorage.setItem('pdfEjercicios', nameEjercicios);
    //localStorage.setItem('nameEjercicios', nameEjercicios);

    console.info(localStorage.getItem('nameEjercicios'));
    console.info(localStorage.getItem('pdfEjercicios'))
}

async function removeAllImages() {
    let origen = localStorage.getItem("origen");
    let imageGrid = null;
    if (origen === "PDF") imageGrid = document.getElementById('image-gridpdf');
    if (origen === "DQR") imageGrid = document.getElementById('image-gridqr');
    if (origen === "FQR") imageGrid = document.getElementById('image-gridcon');
    if (imageGrid) imageGrid.innerHTML = ''; // Elimina todo el contenido del contenedor
}

/////////////////////////
function gopdf() {
    localStorage.setItem('botonPdf', true);
    localStorage.setItem("origen", "PDF");
    window.open('./open.html', '_self');
}

function goqr() {
    localStorage.setItem("origen", "DQR");
    window.open('./open.html', '_self');
}

function getMadridTimestamp() {
    return new Date().toLocaleString('en-GB', { timeZone: 'Europe/Madrid', hour12: true });
}


/////////////////////////////////////////////////////
async function goEventUbicacion(strvideos, urlvideos, urlpdf) {
    let lUnaVez = false;
    let now = new Date();

    // Obtener año, mes, día, horas, minutos y segundos
    let year = now.getFullYear();
    let month = String(now.getMonth() + 1).padStart(2, '0'); // Los meses en JavaScript van de 0 a 11, por lo que sumamos 1
    let day = String(now.getDate()).padStart(2, '0');
    let hours = String(now.getHours()).padStart(2, '0');
    let minutes = String(now.getMinutes()).padStart(2, '0');
    let seconds = String(now.getSeconds()).padStart(2, '0');

    // Formatear la fecha como "Y-m-d H:i:s"
    let timestampIni = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
    console.log(timestampIni);

    if (navigator.onLine) {
        //let timestampIni = getMadridTimestamp();
        //navigator.geolocation.getCurrentPosition(
        const eventDataGo = {
            uniqueNumber: Date.now(),
            fecha: timestampIni,
            pdf_url: urlpdf,
            pdf_rhb: urlvideos,
            latitud: 41.5568023,
            longitud: 2.05310186385176
        };

        console.info(eventDataGo)
        ////////////////////////////////////////
        console.log("Tienes conexión a Internet.");
        if (!lUnaVez) {
            try {
                // Esperar la respuesta de fetch
                const response = await fetch(servidorURL + '/php/logs/php_log_ubicacion.php?t=' + new Date().getTime(), {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json; charset=utf-8'
                    },
                    body: JSON.stringify(eventDataGo)
                });

                // Verificar si la respuesta fue exitosa
                if (response.ok) {
                    lUnaVez = true;
                    const result = await response.json(); // Esperar a que el JSON se resuelva
                    console.log(result);
                    window.location.href = "./openvideo.html?" + urlvideos;
                } else {
                    console.log("Error en la respuesta del servidor:", response.status);
                }
            } catch (error) {
                console.log("Error en la petición fetch:", error);
            }
        }
    } else {
        console.log("No tienes conexión a Internet.");
    }
}
//////////////////////////////////////////////////
async function gotoscroll(strvideos) {
    let timestamp = Date.now();  //getMadridTimestamp();
    localStorage.setItem("timestamp", timestamp);

    let nameEjercicios = localStorage.getItem("pdfEjercicios");
    let urlAppEjercicios = localStorage.getItem("nameEjercicios");
    let urlApp = ['rhb', 'ias'].find(p => urlAppEjercicios.includes('/' + p + '/')) || '';
    console.info(nameEjercicios)
    console.info(urlAppEjercicios)
    let returToOpen = localStorage.getItem("returToOpen");
    if (urlApp === returToOpen) {
        if (nameEjercicios) {
            ///////////////////////////////
            let arrSelect = []
            let arrName = "";
            arrSelect = nameEjercicios.split(",")
            for (let i = 1; i < arrSelect.length; i++) {
                let findTmp = arrSelect[i]
                let numReg = findTmp.slice(0, 3);
                let numRegPos = numReg[2];
                console.info(numRegPos);
                if (parseInt(numRegPos) < 9) {
                    const imgElement = document.getElementById(arrSelect[i]); //'img' + i.toString());
                    // Alterna entre las clases de borde cuadrado y redondeado
                    if (imgElement.classList.contains("img-rounded-border-si")) {
                        arrName = arrName + "," + arrSelect[i]
                    }
                }
            }
            console.info(arrName)
            nameEjercicios = arrName;
            ////////////////////////////////////////
            if (nameEjercicios) {
                const nivelDolor = parseInt(document.getElementById('painSlider').value, 10);
                // Confirmar que el dolor es cero y permitir iniciar el ejercicio
                let tiempo = localStorage.getItem("tiempoBase");
                console.info(nameEjercicios)
                let lConfirm = confirm("Del 0 al 10, su dolor es " + nivelDolor + ". El tiempo de duración de cada ejercicio sera de " + tiempo + " minuto/s. Si es correcto y desea iniciar los ejercicios, elija Aceptar.")
                if (lConfirm) {
                    await goEventUbicacion(strvideos, nameEjercicios, urlAppEjercicios);
                }
            }
        }
    }
    else {
        alert("El documento seleccionado no es el adecuado");
    }
}

function vueltaHome() {
    window.open('./index.html', '_self');
}

function vueltaAtras() {
    window.open('./index.html', '_self');
}

async function activaLoad() {
    let eva = localStorage.getItem("eva");
    let mycheckbox = document.getElementById("miCheckbox")
    mycheckbox.checked = false;

    let tiempoBase = localStorage.getItem("tiempoBase");
    if (tiempoBase == undefined || tiempoBase > 5) {
        localStorage.setItem('tiempoBase', 3);
        tiempoBase = 3;
    }
    switch (parseInt(tiempoBase)) {
        case 1:
            document.getElementById("rg30").checked = true;
            break;
        case 3:
            document.getElementById("rg31").checked = true;
            break;
        case 5:
            document.getElementById("rg32").checked = true;
            break;
    }

    // Llama a la función con el valor deseado
    setPainSliderValue(eva);
    document.getElementById('newPDF').style.display = 'none';
    document.getElementById('newDQR').style.display = 'none';
    document.getElementById('newCON').style.display = 'none';
    document.getElementById('botonSavePDF').style.display = 'none';
    document.getElementById('botonSaveDQR').style.display = 'none';
    document.getElementById('botonSaveCON').style.display = 'none';

    let nameEjercicios = localStorage.getItem("nameEjercicios");
    console.info(nameEjercicios);
    let origen = localStorage.getItem("origen");

    if (origen === "PDF") {
        document.getElementById('newPDF').style.display = 'block';
        removeAllImages();
        if (!nameEjercicios) {
            localStorage.setItem('botonPdf', false);
            document.getElementById('boton').style.display = 'block';
            nameEjercicios = "./open.html?";
        }
        else {
            let botonPdf = JSON.parse(localStorage.getItem('botonPdf'));
            if (botonPdf) {
                document.getElementById('boton').style.display = 'true';
                localStorage.setItem('botonPdf', false);
            }
            else {
                document.getElementById('boton').style.display = 'none';
            }
            gotoImagenes(nameEjercicios);
            let imagenes = localStorage.getItem('pdfEjercicios');
            console.info(imagenes)
            let imageLinks = [];
            imageLinks = imagenes.split(",");
            viewImages(imageLinks);
        }
    }
    else {
        if (origen === "DQR") {
            document.getElementById('newDQR').style.display = 'block';
            removeAllImages();
            if (!nameEjercicios) {
                nameEjercicios = "./open.html?";
            }
            else {
                //let pdfEjercicios = localStorage.getItem('pdfEjercicios');
                gotoImagenes(nameEjercicios);
                let imagenes = localStorage.getItem('pdfEjercicios');
                console.info(imagenes)
                let imageLinks = [];
                imageLinks = imagenes.split(",");
                viewImages(imageLinks);
            }
        }
        else {
            if (origen === "FQR") {
                document.getElementById('newCON').style.display = 'block';
                removeAllImages();
                if (!nameEjercicios) {
                    nameEjercicios = "./open.html?";
                }
                else {
                    gotoImagenes(nameEjercicios);
                    let imagenes = localStorage.getItem('pdfEjercicios');
                    //console.info(imagenes);
                    let imageLinks = [];
                    imageLinks = imagenes.split(",");
                    viewImages(imageLinks);
                    document.getElementById('botonSaveCON').style.display = 'none'; // 'block';
                }
            }
        }
    }
}

function onScanSuccess(qrMessage) {
    removeAllImages();
    //document.getElementById('result').innerText = `${qrMessage}`;
    let nameEjercicios = qrMessage;
    localStorage.setItem('nameEjercicios', qrMessage);
    if (qrMessage) stopScanning();
    gotoImagenes(nameEjercicios);
    let imagenes = localStorage.getItem('pdfEjercicios');
    let imageLinks = [];
    imageLinks = imagenes.split(",");
    viewImages(imageLinks);
    document.getElementById('botonInit').style.display = 'none';
    document.getElementById('botonSaveDQR').style.display = 'none'; // 'block';
}

function stopScanning() {
    document.getElementById('botonInit').style.display = 'none'; // 'block';
    document.getElementById('botonFin').style.display = 'none';
    html5QrCode.stop().then(() => {
        console.log("Escaneo detenido.");
        //chartPdf();
    }).catch((err) => {
        console.log("Error deteniendo el escaneo:", err);
    });
}
////////////////////////////////
async function extractImagesFromPDFfromUrl(url, cadena) {
    const pdfjsLib = window['pdfjs-dist/build/pdf'];

    console.info(`Cargando PDF desde: ${url}`);

    try {
        const response = await fetch(url);
        if (!response.ok) throw new Error(`Error al cargar el PDF: ${response.statusText}`);

        const blob = await response.blob();
        const fileName = url.split('/').pop().replace('.pdf', ''); // Extraer el nombre del archivo sin extensión

        const reader = new FileReader();
        reader.readAsDataURL(blob);
        reader.onload = function () {
            let dataUri = reader.result;
            loadScriptapp('../js/pdf.min.js')
                .then(() => {
                    console.log('Todos los scripts se han cargado correctamente.');
                    onloadFinal(dataUri, fileName, cadena);

                })
                .catch(error => console.error('Error al cargar los scripts:', error));
        };
    } catch (error) {
        console.error(error);
    }
}

//////////////////////////////
async function extractImagesFromPDF(file, cadena) {
    const pdfjsLib = window['pdfjs-dist/build/pdf'];
    console.info(file.name)
    let fileName = file.name
    fileName = fileName.slice(0, fileName.length - 4)
    // Lee el archivo PDF como ArrayBuffer
    const fileReader = new FileReader();
    ////////////////////////
    //let reader = new FileReader();
    //reader.readAsBinaryString(file);
    fileReader.readAsDataURL(file);
    fileReader.onload = function () {
        let dataUri = fileReader.result;
        const loadPdf = window['pdfjs-dist/build/pdf']
            ? Promise.resolve()
            : loadScriptapp('../js/pdf.min.js');
        loadPdf
            .then(() => {
                console.log('pdf.js listo.');
                onloadFinal(dataUri, fileName, cadena);
            })
            .catch(error => console.error('Error al cargar pdf.js:', error));
    };
    fileReader.onerror = function () {
        //console.log('there are some problems');
    };
    //fileReader.readAsArrayBuffer(file);
}

////////////////////////////////////////////////
// Ejemplo de uso
async function onloadFinal(urlFin, fileName, cadena) {

    const urlPDF = urlFin; // Reemplaza 'URL_DEL_PDF' con la URL real del archivo PDF remoto
    //console.info(urlFin)
    let arr2;
    await cargarPDFDesdeURLAUint8Array(urlPDF)
        .then(uint8Array => {
            if (uint8Array) {
                //console.log('Uint8Array del PDF:', uint8Array);
                arr2 = uint8Array;
                // Puedes realizar cualquier operación adicional con el Uint8Array aquí
            } else {
                console.log('No se pudo cargar el PDF.');
            }
        });
    try {
        const typedArray = arr2; //new Uint8Array(event.target.result);
        //console.info(typedArray);

        //pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.14.305/pdf.worker.min.js';
        pdfjsLib.GlobalWorkerOptions.workerSrc = '../js/pdf.worker.min.js';

        const loadingPdfDocument = pdfjsLib.getDocument(typedArray);
        const pdfDocumentInstance = await loadingPdfDocument.promise;

        const totalNumPages = pdfDocumentInstance.numPages;
        const pagesPromises = [];

        /*for (let currentPage = 1; currentPage <= totalNumPages; currentPage += 1) {
            pagesPromises.push(await getPageImages(currentPage, pdfDocumentInstance));
        }*/

        window._bannerNomPdf = fileName;
        if (parseInt(fileName.slice(0, 4)) > 1000 && parseInt(fileName.slice(0, 4)) < 9999) {
            pagesPromises.push(await extractAllLinks(pdfDocumentInstance, fileName, cadena));
        }
        else {
            pagesPromises.push(await getPageImages(totalNumPages, pdfDocumentInstance));
        }
        window.mostrarBannerAdherencia?.();

        //const pagesData = await Promise.all(pagesPromises);
    } catch (error) {
        console.log(error);
    }
}

async function cargarPDFDesdeURLAUint8Array(urlArr) {
    try {
        const response = await fetch(urlArr);
        if (!response.ok) {
            throw new Error(`Error al cargar el archivo: ${response.statusText}`);
        }
        const arrayBuffer = await response.arrayBuffer();
        const uint8Array = new Uint8Array(arrayBuffer);
        return uint8Array;
    } catch (error) {
        console.error('Error:', error);
        return null;
    }
}
//////////////////////////////////
async function getPageLinks(pageNum, pdfDocumentInstance) {
    try {
        const pdfPage = await pdfDocumentInstance.getPage(pageNum);
        const annotations = await pdfPage.getAnnotations();

        let links = annotations
            .map(annotation => {
                let url = annotation.url || (annotation.action && annotation.action.startsWith('http') ? annotation.action : null);
                let rect = annotation.rect; // [x1, y1, x2, y2]

                return url && rect ? { url, x: rect[0], y: rect[1] } : null;
            })
            .filter(link => link); // Elimina valores nulos

        // Agrupar elementos en filas basándonos en la coordenada Y
        let filas = [];
        let toleranciaY = 5; // Margen de tolerancia para considerar elementos en la misma fila

        links.forEach(link => {
            let fila = filas.find(f => Math.abs(f[0].y - link.y) < toleranciaY);
            if (fila) {
                fila.push(link);
            } else {
                filas.push([link]);
            }
        });

        // Ordenar las filas de arriba a abajo (y de mayor a menor porque el 0 está abajo en PDFs)
        filas.sort((a, b) => b[0].y - a[0].y);

        // Ordenar cada fila de izquierda a derecha
        filas.forEach(fila => fila.sort((a, b) => a.x - b.x));

        // Extraer las URLs ordenadas
        let urlsOrdenadas = filas.flat().map(link => link.url);

        //console.log(`Links en la página ${pageNum} en orden:`, urlsOrdenadas);
        return urlsOrdenadas;
    } catch (error) {
        console.error(`Error al extraer enlaces de la página ${pageNum}:`, error);
        return [];
    }
}
//////////////////////////////////
async function extractAllLinks(pdfDocumentInstance, fileName, cadena) {
    let allUrls = [];
    const totalPages = pdfDocumentInstance.numPages;

    for (let i = 1; i <= totalPages; i++) {
        const pageUrls = await getPageLinks(i, pdfDocumentInstance);
        allUrls = allUrls.concat(pageUrls);
    }

    let fileNameTmp = fileName.slice(5, fileName.length);

    //let fechaMin = new Date().toLocaleString('en-GB', { timeZone: 'Europe/Madrid', hour12: true });
    let fechaMin = Date.now();
    fechaMin = fechaMin.toString(36);

    //let fechaMin = fechaFormateada();

    fileNameTmp = fileNameTmp + "_" + fechaMin; //fechaFormateada();
    let returToOpenPdf = localStorage.getItem("returToOpen") || "rhb";
    let urlsNew = servidorURL + "/" + returToOpenPdf + "/index.html?abecia#" + fileNameTmp;
    for (let i = 0; i < allUrls.length; i++) {
        let urlsItem = allUrls[i];
        if (urlsItem.includes(servidorURL + "/assets/cstvideo/") || urlsItem.includes(servidorURL + "/php/logs/php_log_video.php?video=")) {
            urlsNew = urlsNew + "," + urlsItem.slice(urlsItem.length - 11, urlsItem.length - 4)
        }
        /*if (urlsItem.slice(0, urlsItem.length - 11) === servidorURL + "/assets/cstvideo/") {
            urlsNew = urlsNew + "," + urlsItem.slice(urlsItem.length - 11, urlsItem.length - 4)
        }*/
    }
    console.info(urlsNew)
    localStorage.setItem('nameEjercicios', urlsNew);
    /*if (cadena === "app") {
        await gotoImagenes(urlsNew);
    }
    else {*/
    let origen = "PDF"
    localStorage.setItem("origen", origen);

    let eva = localStorage.getItem("eva");
    let mycheckbox = document.getElementById("miCheckbox")
    mycheckbox.checked = false;

    let tiempoBase = localStorage.getItem("tiempoBase");
    if (tiempoBase == undefined || tiempoBase > 5) {
        localStorage.setItem('tiempoBase', 3);
        tiempoBase = 3;
    }
    switch (parseInt(tiempoBase)) {
        case 1:
            document.getElementById("rg30").checked = true;
            break;
        case 3:
            document.getElementById("rg31").checked = true;
            break;
        case 5:
            document.getElementById("rg32").checked = true;
            break;
    }

    // Llama a la función con el valor deseado
    setPainSliderValue(eva);
    document.getElementById('newPDF').style.display = 'none';
    document.getElementById('newDQR').style.display = 'none';
    document.getElementById('newCON').style.display = 'none';
    document.getElementById('botonSavePDF').style.display = 'none';
    document.getElementById('botonSaveDQR').style.display = 'none';
    document.getElementById('botonSaveCON').style.display = 'none';

    let nameEjercicios = localStorage.getItem("nameEjercicios");
    console.info(nameEjercicios);

    //if (origen === "PDF") 
    {
        document.getElementById('newPDF').style.display = 'block';
        await removeAllImages();

        let botonPdf = JSON.parse(localStorage.getItem('botonPdf'));
        if (botonPdf) {
            document.getElementById('boton').style.display = 'true';
            localStorage.setItem('botonPdf', false);
        }
        else {
            document.getElementById('boton').style.display = 'none';
        }
        await gotoImagenes(nameEjercicios);
        let imagenes = localStorage.getItem('pdfEjercicios');
        console.info(imagenes)
        let imageLinks = [];
        imageLinks = imagenes.split(",");
        await viewImages(imageLinks);
        console.info("salvar PDF");
        await savePDF(1);
        //window.open('./open.html', '_self');
        //}
    }
    return urlsNew;
}
//////////////////////////////////////
async function getPageImages(pageNum, pdfDocumentInstance) {
    try {
        /*const metadata = await pdfDocumentInstance.getMetadata();
        if (metadata) {
            console.info(metadata)
            const keywords = metadata.info.Keywords; // || 'No keywords found';
            console.info(keywords);

            let arrKeywords = [];
            arrKeywords = keywords.split(",")
            console.info(arrKeywords)
        }*/

        const pdfPage = await pdfDocumentInstance.getPage(pageNum);
        console.info(pdfPage)
        await pdfPage.getAnnotations().then(function (annotationData) {
            // Buscar en todas las anotaciones la URL compuesta (con comas = lista de ejercicios)
            for (let j = 0; j < annotationData.length; j++) {
                let strData = annotationData[j].url;
                if (!strData) continue;
                console.log(strData);
                let arraymp4Ini = strData.split(",");
                let nlength = arraymp4Ini.length;
                if (nlength > 1) {
                    localStorage.setItem('nameEjercicios', strData);
                    gotoImagenes(strData);
                    let imagenes = localStorage.getItem('pdfEjercicios');
                    let imageLinks = imagenes.split(",");
                    viewImages(imageLinks);
                    document.getElementById('boton').style.display = 'none';
                    document.getElementById('botonSavePDF').style.display = 'none';
                    break;
                }
            }
        })
    } catch (error) {
        console.log(error);
    }
}

function onScanError(errorMessage) {
    //console.warn(`Error de escaneo: ${ errorMessage } `);
}

function saveQR() {
    let nameEjercicios = localStorage.getItem("nameEjercicios");
    crearQR(nameEjercicios)
}

async function logEventPdf(eventData) {
    const response = await fetch(servidorURL + '/php/logs/php_log_pdf.php?t=' + new Date().getTime(), {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json; charset=utf-8'
        },
        body: JSON.stringify(eventData)
    });
    const result = await response.json();
    console.log(result);
}

function fechaFormateada() {
    // Obtener la fecha y hora actual
    const fechaHoraActual = new Date();

    // Formatear la fecha y hora como
    //const año = String(fechaHoraActual.getFullYear()).slice(-2)
    const año = fechaHoraActual.getFullYear();
    const mes = String(fechaHoraActual.getMonth() + 1).padStart(2, '0'); // Los meses empiezan desde 0
    const dia = String(fechaHoraActual.getDate()).padStart(2, '0');
    const horas = String(fechaHoraActual.getHours()).padStart(2, '0');
    const minutos = String(fechaHoraActual.getMinutes()).padStart(2, '0');
    const segundos = String(fechaHoraActual.getSeconds()).padStart(2, '0');

    // Combinar en una formateada
    const fechaHoraFormateada = `${año}${mes}${dia}_${horas}${minutos}${segundos}`;

    console.log(fechaHoraFormateada);
    return fechaHoraFormateada
}

async function savePDF(n) {
    let nameEjercicios = localStorage.getItem("pdfEjercicios");

    if (nameEjercicios) {
        let deseaGuardar = false;
        if (n === 0) {
            deseaGuardar = window.confirm("Desea guardar el documento en su sistema de ficheros en formato PDF.");
        }
        if (deseaGuardar) {
            // Si el usuario acepta, se guarda el PDF
            await crearPDF(n);
        }
    }
}

async function crearQR(imagenes) {
    let img = [];
    img = imagenes.split(",");
    let images = "";
    for (let i = 1; i < img.length; i++) {
        images = images + "," + img[i];
    }
    let nom = [];
    nom = img[0].split("?"); //imagenes.split("?");
    let nom2 = [];
    nom2 = nom[1].split("#"); //imagenes.split("?");
    let nomPdf = "";
    if (nom2.length > 1) {
        nomPdf = nom2[1];
    }
    else {
        nomPdf = nom[1];
    }

    console.info(nom[0])
    console.info(nom[1])
    console.info(imagenes)
    console.info(images)
    console.info(nomPdf)
    console.info(nomPdf.slice(0, 1))
    let newQR = "";
    //if (nomPdf.slice(0, 1) !== "#") 
    {
        //newQR = nom[0] + "?#" + nom[1] + images;
        newQR = nom[0] + "?" + nom[1] + images;
        console.info(newQR);
        let docport;
        await loadScriptapp('../js/jspdf.umd.min.js')
            .then(() => {
                // Aquí puedes usar las funciones y clases de los scripts cargados
                console.log('Todos los scripts se han cargado correctamente.');
                docport = new window.jspdf.jsPDF({
                    orientation: 'portrait', unit: 'mm', format: 'a4', putOnlyUsedFonts: true, compress: true
                });
            })
            .catch(error => console.error('Error al cargar los scripts:', error));

        if (docport === undefined) {
            alert("Presione de nuevo el botón");
            return;
        }
        //////////////////////////////////////////
        let inicio = 10;
        let celliniw = 20;
        let cellinih = 58;
        let cellmax = 43;
        let cellmin = 33;
        let cellw = cellmax;
        let cellh = cellmax;

        /////////////////////////////////////////////
        let logo = new Image()
        //logo.src = "../iconos/cst_20242.png"
        logo.src = "../iconos/CST_HU4.png"

        docport.addImage(logo, 'PNG', celliniw - 10 + 2, 10, 36, 18, undefined, 'FAST')
        docport.link(celliniw - 10 + 2, 10, 65, 18, { url: '' })
        docport.setFontSize(14)
        let titulo3 = nomPdf.toUpperCase() //"LOAD QR" + " ." + String(numImages);
        //docport.text(celliniw + cellw, 21, titulo3)
        docport.text(celliniw + cellw, 24, titulo3)
        docport.setFontSize(8)
        //////////////////////////////////////////////////////////////

        // Cargar los scripts dinámicamente
        await loadScriptapp('../js/qrious.min.js')
            .then(() => {
                // Aquí puedes usar las funciones y clases de los scripts cargados
                console.log('Todos los scripts se han cargado correctamente.');
                qrCode = new QRious({
                    element: document.getElementById("qr_code"),
                    background: '#ffffff',
                    backgroundAlpha: 1,
                    foreground: "#000000",
                    foregroundAlpha: 1,
                    level: 'H',
                    padding: 0,
                    size: 600,
                    value: newQR,
                });
            })
            .catch(error => console.error('Error al cargar los scripts:', error));
        ///////////////////////////////////////////////
        let dataUrl = document.querySelector('#qr_code');//.querySelector('img');//.src;
        //console.info(dataUrl)
        docport.addImage(dataUrl, "PNG", 50, 50, 140, 140, undefined, 'FAST');
        docport.link(50, 50, 140, 140, { url: newQR })
        ///////////////////////////////////////////
        docport.setFontSize(12);
        docport.text(celliniw + 4, 210, "Per accedir als exercicis:");
        docport.text(celliniw + 4, 220, " - Cliqueu directament al QR si disposeu del document pdf al vostre mòbil o pc");
        docport.text(celliniw + 4, 230, " - o Escanejar el QR si només disposeu del document en paper");

        docport.setFontSize(7)
        let date = new Date().getFullYear();
        let lic1 = "Aquesta obra està subjecta a una llicència de Reconeixement-NoComercial-SenseObraDerivada https://creativecommons.org/licenses/by-nc-nd/4.0/"
        let lic2 = "Citar aquesta obra com: Exercicis de fisioteràpia. Barcelona: Consorci Sanitari de Terrassa, " + date + ". SERVEI DE REHABILITACIÓ / FISIOTERÀPIA."

        docport.text(celliniw + 4, 270, lic1)
        docport.text(celliniw + 4, 275, lic2)

        docport.setDrawColor(155);
        docport.setFillColor(255, 255, 255);

        let today = new Date();
        let newdat = "" + today;
        docport.text(celliniw + cellw + 4, 280, newdat);
        ////////////////////////////////////////
        docport.setProperties({
            title: nomPdf, //titulo + "_" + registro,
            subject: 'tractament',
            author: 'CST. Servei de fisioteràpia',
            keywords: newQR,
            creator: 'Software info. (abeciabuil@gmail.com)',
        });

        // Preguntar al usuario si desea guardar el PDF
        const deseaGuardar = window.confirm("¿Desea guardar el QR - " + "qr_" + nomPdf + " - en formato PDF?");
        nomPdf = "qr_" + nomPdf + ".pdf"
        if (deseaGuardar) {
            // Si el usuario acepta, se guarda el PDF
            docport.save(nomPdf);
            localStorage.setItem('nameEjercicios', newQR);
        }
    }
}

function initqr() {
    document.getElementById('botonInit').style.display = 'none';
    document.getElementById('botonFin').style.display = 'block';
    html5QrCode.start(
        { facingMode: "environment" },
        {
            fps: 10,
            qrbox: { width: 300, height: 250 },
            // Add this line to enable camera access on Safari and iPhone
            video: document.getElementById('reader')
        }, onScanSuccess, onScanError)
        .catch(err => {
            console.error(`No se pudo iniciar el escaneo: ${err} `);
        });

}


