<?php

include('../../path.php');

require ('phpqrcode/qrlib.php');

require_once(ROOT_CONTROLLER.'lote_qr.php');

$Obj_lote_qr = new lote_qr();

require_once(ROOT_CHARACTER_FIX);

//require_once($context_lote_qr.'bussines/fix_characters.php');

$Obj_fix_characters = new fix_characters();



$action=!empty($_REQUEST['action'])?$_REQUEST['action']:'';

$_ScrollTo=!empty($_REQUEST['_ScrollTo'])?$_REQUEST['_ScrollTo']:'';

$_Pagina=!empty($_REQUEST['_Pagina'])?$_REQUEST['_Pagina']:'';

$_Clausula_Fk=!empty($_REQUEST['_Clausula_Fk'])?$_REQUEST['_Clausula_Fk']:'';

$_IdFk=!empty($_REQUEST['_IdFk'])?$_REQUEST['_IdFk']:'';



if (!empty($_POST))

{

    $Id_Lote_Qr=!empty($_REQUEST['Id_Lote_Qr'])?$_REQUEST['Id_Lote_Qr']:'';

   $Qr_Icon_Image=!empty($_REQUEST['Qr_Icon_Image'])?$_REQUEST['Qr_Icon_Image']:'';

   $Cantidad_Qrs=!empty($_REQUEST['Cantidad_Qrs'])?$_REQUEST['Cantidad_Qrs']:'';

   $Url_Base=!empty($_REQUEST['Url_Base'])?$_REQUEST['Url_Base']:'';

   $Lote=!empty($_REQUEST['Lote'])?$_REQUEST['Lote']:'';

   $Borrado_Logico=!empty($_REQUEST['Borrado_Logico'])?$_REQUEST['Borrado_Logico']:'';

   $Status=!empty($_REQUEST['Status'])?$_REQUEST['Status']:'';

   $Usuario_Registro=!empty($_REQUEST['Usuario_Registro'])?$_REQUEST['Usuario_Registro']:'';

   $Id_Fk_Usuario_Registro=!empty($_REQUEST['Id_Fk_Usuario_Registro'])?$_REQUEST['Id_Fk_Usuario_Registro']:'';

   $Usuario_Modifico=!empty($_REQUEST['Usuario_Modifico'])?$_REQUEST['Usuario_Modifico']:'';

   $Id_Fk_Usuario_Modifico=!empty($_REQUEST['Id_Fk_Usuario_Modifico'])?$_REQUEST['Id_Fk_Usuario_Modifico']:'';

   $Veces_Impreso=!empty($_REQUEST['Veces_Impreso'])?$_REQUEST['Veces_Impreso']:'';

   $Fecha_Registro=!empty($_REQUEST['Fecha_Registro'])?$_REQUEST['Fecha_Registro']:'';

   $Fecha_Modificacion=!empty($_REQUEST['Fecha_Modificacion'])?$_REQUEST['Fecha_Modificacion']:'';

   

    $Field=!empty($_REQUEST['Field'])?$_REQUEST['Field']:''; 

    $Field=$Obj_fix_characters->fix($Field);

    $Value=!empty($_REQUEST['Value'])?$_REQUEST['Value']:''; 

    $Value=$Obj_fix_characters->fix($Value);



}    



switch ($action) {



    case 'campos':

        try{

            $Obj_lote_qr->update_field_lote_qr($Field,$Value,$Id_Lote_Qr);

            //$locations="Location: ./#$Id_Lote_Qr";

            //header($locations);

            }   

        catch (Exception $e) {

            echo 'Excepcion capturada: ',  $e->getMessage(), "\n";

        }

        break;

    

    

    case 'editar':



        try{

            if (!file_exists('../../../repositorio/lote_qr_img')) {

                mkdir('../../../repositorio/lote_qr_img', 0777, true); // Crear directorio recursivamente con permisos completos (0777)

            }

            if ($Qr_Icon_Image!='') {

                    $tamano = $_FILES ['Qr_Icon_Image_file']['size'];

                    if ($tamano>0) 

                    {

                        if (strpos($_FILES["Qr_Icon_Image_file"]["type"], 'image/') !== false) {

                            $sep=explode('image/',$_FILES["Qr_Icon_Image_file"]["type"]); // Separamos image/ 

                            $Mec_type='img';

                        }                    

                        $tipo=$sep[1]; // Optenemos el tipo de imagen que es

                        if($tipo == "PNG"|| $tipo == "png" || $tipo == "gif" ||$tipo == "GIF" || $tipo == "jpg"||$tipo == "JPG" || $tipo == "jpeg"||$tipo == "JPEG" || $tipo == "bmp"||$tipo == "BMP"||$tipo != "") {

                            move_uploaded_file ($_FILES ['Qr_Icon_Image_file']['tmp_name'], $Qr_Icon_Image);

                        }

                    }

                }

                else

                {   

                    $tamano = $_FILES ['Qr_Icon_Image_file']['size'];

                    if ($tamano>0) 

                    {

                    // Creamos la cadena aletoria para la imagen.

                    $str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"; 

                    $cad = ""; 

                    for($i=0;$i<12;$i++) { 

                        $cad .= substr($str,rand(0,62),1); 

                    } 

                    // Fin de la creacion de la cadena aletoria 

                    $tamano = $_FILES ['Qr_Icon_Image_file']['size']; // Leemos el tamano del fichero 

                    $tamano_max="50000000000"; // tamano maximo permitido 

                    // echo $tamano;

                    if( $tamano < $tamano_max){ // Comprovamos el tamano  

                        $destino = '../../../repositorio/lote_qr_img/' ; // Carpeta donde se guarda                    

                        $sep="";

                        $Mec_type="";

                        if (strpos($_FILES["Qr_Icon_Image_file"]["type"], 'image/') !== false) {

                            $sep=explode('image/',$_FILES["Qr_Icon_Image_file"]["type"]); // Separamos image/ 

                            $Mec_type='img';

                        }

                        if (strpos($_FILES["Qr_Icon_Image_file"]["type"], 'audio/') !== false) {

                            $sep=explode('audio/',$_FILES["Qr_Icon_Image_file"]["type"]); // Separamos image/ 

                            $Mec_type='aud';

                        }

                        if ($tamano>0) {

                        $tipo=$sep[1]; // Optenemos el tipo de imagen que es    

                        }

                        if($tipo == "PNG"|| $tipo == "png" || $tipo == "gif" ||$tipo == "GIF" || $tipo == "jpg"||$tipo == "JPG" || $tipo == "jpeg"||$tipo == "JPEG" || $tipo == "bmp"||$tipo == "BMP"||$tipo != "") { // Si el tipo de imagen a subir es el mismo de los permitidos, segimos. Puedes agregar mas tipos de imagen

                            try {

                                if ($tamano>0){

                                // se comentaron para que le cambie el nombre a la nueva imagen.

                                    move_uploaded_file ($_FILES ['Qr_Icon_Image_file']['tmp_name'], $destino . '/'.$cad.'.'.$tipo);

                                 // Subimos el archivo                          

                                }

                            

                            } catch (Exception $e) {

                            }

                            $Mec_urla=$cad;

                            $Mec_formato='.'.$tipo;

                        } else { 

                             $Qr_Icon_Image_img="";

                        }

                    } else { 

                        $Qr_Icon_Image_img="";

                    }

                    if (strlen($tipo)==0) {

                        $Qr_Icon_Image_img='';       

                    } else {

                        $Qr_Icon_Image_img=$destino.'/'.$cad.'.'.$tipo;      

                    }

                    //termina algoritmo de carga de imagen.

                    $Qr_Icon_Image=$Qr_Icon_Image_img;  

                    }  

                }

 

             $Obj_lote_qr->update_lote_qr($Id_Lote_Qr, $Qr_Icon_Image, $Url_Base);

            /*hacemos una consulta para obtener los qr de lote y modificar su informacion*/

            $Dir_Qr='../../../repositorio/lote_qr_img/qrs_'.$Id_Lote_Qr;

            if (!file_exists($Dir_Qr)) {

                mkdir($Dir_Qr, 0777, true); // Crear directorio recursivamente con permisos completos (0777)

            }

            //$url='https://cloudpro.vip/appquadrata/';

            $url=$Url_Base;

            $Adapter_tag=$Obj_lote_qr->get_tags_byid($Id_Lote_Qr);

            while ($Field_tag=$Adapter_tag->fetch_assoc()){

                $Id_Qr_Tag=$Field_tag['Id_Qr_Tag'];

                $Hash_Qr=$Field_tag['Hash_Tag_Qr'];

                $Qr_Img1px=str_replace('../../../repositorio/lote_qr_img/qrs_'.$Id_Lote_Qr.'/', '', $Field_tag['Qr_Img1px']);

                $Qr_Img3px=str_replace('../../../repositorio/lote_qr_img/qrs_'.$Id_Lote_Qr.'/', '', $Field_tag['Qr_Img3px']);

                $Qr_Img5px=str_replace('../../../repositorio/lote_qr_img/qrs_'.$Id_Lote_Qr.'/', '', $Field_tag['Qr_Img5px']);

                $Qr_Img10px=str_replace('../../../repositorio/lote_qr_img/qrs_'.$Id_Lote_Qr.'/', '', $Field_tag['Qr_Img10px']);



                $Qr_Img1px=updateQRCode($Dir_Qr, $Qr_Img1px, $url, $Hash_Qr, 1, $Qr_Icon_Image);

                $Qr_Img3px=updateQRCode($Dir_Qr, $Qr_Img3px, $url, $Hash_Qr, 3, $Qr_Icon_Image);

                $Qr_Img5px=updateQRCode($Dir_Qr, $Qr_Img5px, $url, $Hash_Qr, 5, $Qr_Icon_Image);

                $Qr_Img10px=updateQRCode($Dir_Qr, $Qr_Img10px, $url, $Hash_Qr, 10, $Qr_Icon_Image);

                

            }

            /*End hacemos una consulta para obtener los qr de lote y modificar su informacion*/

            if($_Clausula_Fk!='' && $_IdFk!=''){

               $locations="Location: ../view/?_Clausula_Fk=$_Clausula_Fk&_IdFk=$_IdFk&pagina=$_Pagina&_Id_Registro=$Id_Lote_Qr&_ScrollTo=$_ScrollTo";

            }else{

              $locations="Location: ../view/?pagina=$_Pagina&_Id_Registro=$Id_Lote_Qr&_ScrollTo=$_ScrollTo";

            }

            header($locations);

            }   

        catch (Exception $e) {

            echo 'Excepcion capturada: ',  $e->getMessage(), "\n";

        }

        break;



        case 'registrar':



        try{

            if (!file_exists('../../../repositorio/lote_qr_img')) {

                mkdir('../../../repositorio/lote_qr_img', 0777, true); // Crear directorio recursivamente con permisos completos (0777)

            }

            $tamano_Qr_Icon_Image = $_FILES ['Qr_Icon_Image_file']['size'];

            if ($tamano_Qr_Icon_Image>0) 

            {

            $str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"; 

                $cad = ""; 

                for($i=0;$i<12;$i++) { 

                    $cad .= substr($str,rand(0,62),1); 

                } 

                // Fin de la creacion de la cadena aletoria 

                $tamano = $_FILES ['Qr_Icon_Image_file']['size']; // Leemos el tamano del fichero 

                $tamano_max="50000000000"; // tamano maximo permitido 

                // echo $tamano;

                if( $tamano < $tamano_max){ // Comprovamos el tamano  

                    $destino = '../../../repositorio/lote_qr_img' ; // Carpeta donde se guarda                    

                    $sep="";

                    $Mec_type="";

                    if (strpos($_FILES["Qr_Icon_Image_file"]["type"], 'image/') !== false) {

                        $sep=explode('image/',$_FILES["Qr_Icon_Image_file"]["type"]); // Separamos image/ 

                        $Mec_type='img';

                    }

                    if (strpos($_FILES["Qr_Icon_Image_file"]["type"], 'audio/') !== false) {

                        $sep=explode('audio/',$_FILES["Qr_Icon_Image_file"]["type"]); // Separamos image/ 

                        $Mec_type='aud';

                    }

                    if ($tamano>0) {

                        $tipo=$sep[1]; // Optenemos el tipo de imagen que es    

                    }

                    if($tipo == "PNG"|| $tipo == "png" || $tipo == "gif" ||$tipo == "GIF" || $tipo == "jpg"||$tipo == "JPG" || $tipo == "jpeg"||$tipo == "JPEG" || $tipo == "bmp"||$tipo == "BMP"||$tipo != "") { // Si el tipo de imagen a subir es el mismo de los permitidos, segimos. Puedes agregar mas tipos de imagen

                        try {

                            if ($tamano>0){

                            // se comentaron para que le cambie el nombre a la nueva imagen.

                                move_uploaded_file ($_FILES ['Qr_Icon_Image_file']['tmp_name'], $destino . '/'.$cad.'.'.$tipo);

                             // Subimos el archivo                          

                            }

                            

                        } catch (Exception $e) {

                        }

                        $Mec_urla=$cad;

                        $Mec_formato='.'.$tipo;

                    } else { 

                         $Qr_Icon_Image_img="";

                    }

                } else { 

                    $logo="";

                }

                if (strlen($tipo)==0) {

                    $Qr_Icon_Image_img='';       

                } else {

                    $Qr_Icon_Image_img=$destino.'/'.$cad.'.'.$tipo;      

                }

                //termina algoritmo de carga de imagen.

                $Qr_Icon_Image=$Qr_Icon_Image_img; 

                } 

        

             $Id_Lote=$Obj_lote_qr->insert_lote_qr($Qr_Icon_Image, $Cantidad_Qrs, $Url_Base, $Lote, $Borrado_Logico, $Status, $Usuario_Registro, $Id_Fk_Usuario_Registro, $Usuario_Modifico, $Id_Fk_Usuario_Modifico, $Veces_Impreso, $Fecha_Registro, $Fecha_Modificacion);

            $Dir_Qr='../../../repositorio/lote_qr_img/qrs_'.$Id_Lote;

            if (!file_exists($Dir_Qr)) {

                mkdir($Dir_Qr, 0777, true); // Crear directorio recursivamente con permisos completos (0777)

            }

            //$url='https://cloudpro.vip/appquadrata/';

            $url=$Url_Base;

            for ($i = 1; $i <= $Cantidad_Qrs; $i++) {

                $Id_Qr_Tag=0;

                $Try_Insert=0;

                $Max_Id=$Obj_lote_qr->get_max_id();

                $Hash_Qr=generarHashQr($Max_Id);

                while($Id_Qr_Tag==0){

                    $Try_Insert++;

                    $Id_Qr_Tag=$Obj_lote_qr->insert_tag_qr($Id_Lote,$Qr_Icon_Image,$Url_Base,$Hash_Qr,$Try_Insert);

                    if($Id_Qr_Tag!=0){

                        $Qr_Img1px=generateQRCode($Dir_Qr,$url, $Hash_Qr, 1,$Qr_Icon_Image);

                        $Qr_Img3px=generateQRCode($Dir_Qr,$url, $Hash_Qr, 3,$Qr_Icon_Image);

                        $Qr_Img5px=generateQRCode($Dir_Qr,$url, $Hash_Qr, 5,$Qr_Icon_Image);

                        $Qr_Img10px=generateQRCode($Dir_Qr,$url, $Hash_Qr, 10,$Qr_Icon_Image);

                        $Obj_lote_qr->update_tag_qr($Id_Qr_Tag,$Qr_Img1px,$Qr_Img3px,$Qr_Img5px,$Qr_Img10px);

                    }

                    $Hash_Qr=generarHashQr($Max_Id);

                }

                

            }

                if($_Clausula_Fk!='' && $_IdFk!=''){

                       $locations="Location: ../view/?_Clausula_Fk=$_Clausula_Fk&_IdFk=$_IdFk&pagina=1&_Id_Registro=$Id_Lote&_ScrollTo=0";

                }else{

                    $locations="Location: ../view/?pagina=1&_Id_Registro=$Id_Lote&_ScrollTo=0";

                }

            header($locations);        

        }catch (Exception $e) {

            echo 'Excepcion capturada: ',  $e->getMessage(), "\n";

        }   



        break;

        case 'duplicar':



        try{

 

            $tamano_Qr_Icon_Image = $_FILES ['Qr_Icon_Image_file']['size'];

            if ($tamano_Qr_Icon_Image>0) 

            {

            $str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"; 

                $cad = ""; 

                for($i=0;$i<12;$i++) { 

                    $cad .= substr($str,rand(0,62),1); 

                } 

                // Fin de la creacion de la cadena aletoria 

                $tamano = $_FILES ['Qr_Icon_Image_file']['size']; // Leemos el tamano del fichero 

                $tamano_max="50000000000"; // tamano maximo permitido 

                // echo $tamano;

                if( $tamano < $tamano_max){ // Comprovamos el tamano  

                    $destino = '../../../repositorio/lote_qr_img' ; // Carpeta donde se guarda                    

                    $sep="";

                    $Mec_type="";

                    if (strpos($_FILES["Qr_Icon_Image_file"]["type"], 'image/') !== false) {

                        $sep=explode('image/',$_FILES["Qr_Icon_Image_file"]["type"]); // Separamos image/ 

                        $Mec_type='img';

                    }

                    if (strpos($_FILES["Qr_Icon_Image_file"]["type"], 'audio/') !== false) {

                        $sep=explode('audio/',$_FILES["Qr_Icon_Image_file"]["type"]); // Separamos image/ 

                        $Mec_type='aud';

                    }

                    if ($tamano>0) {

                        $tipo=$sep[1]; // Optenemos el tipo de imagen que es    

                    }

                    if($tipo == "PNG"|| $tipo == "png" || $tipo == "gif" ||$tipo == "GIF" || $tipo == "jpg"||$tipo == "JPG" || $tipo == "jpeg"||$tipo == "JPEG" || $tipo == "bmp"||$tipo == "BMP"||$tipo != "") { // Si el tipo de imagen a subir es el mismo de los permitidos, segimos. Puedes agregar mas tipos de imagen

                        try {

                            if ($tamano>0){

                            // se comentaron para que le cambie el nombre a la nueva imagen.

                                move_uploaded_file ($_FILES ['Qr_Icon_Image_file']['tmp_name'], $destino . '/'.$cad.'.'.$tipo);

                             // Subimos el archivo                          

                            }

                            

                        } catch (Exception $e) {

                        }

                        $Mec_urla=$cad;

                        $Mec_formato='.'.$tipo;

                    } else { 

                         $Qr_Icon_Image_img="";

                    }

                } else { 

                    $logo="";

                }

                if (strlen($tipo)==0) {

                    $Qr_Icon_Image_img='';       

                } else {

                    $Qr_Icon_Image_img=$destino.'/'.$cad.'.'.$tipo;      

                }

                //termina algoritmo de carga de imagen.

                $Qr_Icon_Image=$Qr_Icon_Image_img; 

                }else{

                    if($Qr_Icon_Image!=''){

                        $str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"; 

                        $cad = ""; 

                        for($i=0;$i<12;$i++) { 

                            $cad .= substr($str,rand(0,62),1); 

                        }

                        $extension = pathinfo($Qr_Icon_Image, PATHINFO_EXTENSION);

                        $Qr_Icon_ImageCopia = '../../../repositorio/lote_qr_img/'.$cad . "." . $extension;

                        copy($Qr_Icon_Image, $Qr_Icon_ImageCopia);

                        $Qr_Icon_Image=$Qr_Icon_ImageCopia;

                    }else{

                        $Qr_Icon_Image='';

                    }

                } 

        

         $idtupla=$Obj_lote_qr->insert_lote_qr($Qr_Icon_Image, $Cantidad_Qrs, $Url_Base, $Lote, $Borrado_Logico, $Status, $Usuario_Registro, $Id_Fk_Usuario_Registro, $Usuario_Modifico, $Id_Fk_Usuario_Modifico, $Veces_Impreso, $Fecha_Registro, $Fecha_Modificacion);

         if($_Clausula_Fk!='' && $_IdFk!=''){

               $locations="Location: ../view/?_Clausula_Fk=$_Clausula_Fk&_IdFk=$_IdFk&pagina=1&_Id_Registro=$idtupla&_ScrollTo=0";

        }else{

            $locations="Location: ../view/?pagina=1&_Id_Registro=$idtupla&_ScrollTo=0";

        }

            header($locations);        

           }    

        catch (Exception $e) {

            echo 'Excepcion capturada: ',  $e->getMessage(), "\n";

        }   



        break;

    

        case 'eliminar':           

            try{

                $Obj_lote_qr->delete_lote_qr($Id_Lote_Qr);

                $Dir_Qr='../../../repositorio/lote_qr_img/qrs_'.$Id_Lote_Qr;

                deleteDirectory($Dir_Qr);

                $locations ="Location: ../view";

                header($locations);

            }catch (Exception $e) {

                echo 'Excepcion capturada: ',  $e->getMessage(), "\n";

            }   

        break;



    default:

        

        break;

}



function generarHashQr($Max_Id) {

    //$caracteres = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

    $caracteres = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';

    //$longitud = 10;

    $longitud_total = 10;

    $Max_Id = strval($Max_Id); // Asegurarse de que $Max_Id sea una cadena de texto

    $longitud_max_id = strlen($Max_Id);

    //$longitud_hash = $longitud_total - $longitud_max_id;

    // Determinar la longitud del hash que se generará

    if ($longitud_max_id >= 5) {

        $longitud_hash = $longitud_total - 5;

    } else {

        $longitud_hash = $longitud_total - $longitud_max_id;

    }

    $Hash_Qr = '';

    //$total_combinaciones = pow(strlen($caracteres), $longitud);

    for ($i = 0; $i < $longitud_hash; $i++) {

        $Hash_Qr .= $caracteres[rand(0, strlen($caracteres) - 1)];

    }

    $Hash_Qr .= $Max_Id;

    return $Hash_Qr;

}



function generateQRCode($Dir_Qr,$url, $Hash_Qr, $size,$Qr_Icon_Image)

{

    $filename="";

    // Nombre del archivo del código QR

    $filename = $Dir_Qr .'/'. "{$Hash_Qr}_{$size}px.png";



    // Configuración del tamaño del módulo y margen

    //$sizeFactor = $size / 10;

    $sizeFactor=$size;

    $margin = 2;



    // Generar código QR

    QRcode::png($url.'?q='.$Hash_Qr, $filename, QR_ECLEVEL_L, $sizeFactor, $margin);

    // Abrir el código QR generado

    $qr = imagecreatefrompng($filename);

    if (file_exists($Qr_Icon_Image) && exif_imagetype($Qr_Icon_Image) == IMAGETYPE_JPEG) {

        $img = imagecreatefromjpeg($Qr_Icon_Image);

    } else if (file_exists($Qr_Icon_Image) && exif_imagetype($Qr_Icon_Image)==IMAGETYPE_PNG){

        $img = imagecreatefrompng($Qr_Icon_Image);

    }

    if (isset($Qr_Icon_Image) && file_exists($Qr_Icon_Image) && (exif_imagetype($Qr_Icon_Image)==IMAGETYPE_JPEG || exif_imagetype($Qr_Icon_Image)==IMAGETYPE_PNG)) {

        // Abrir la imagen que deseas superponer

        $iconSize = min($sizeFactor, 30);

        if (exif_imagetype($Qr_Icon_Image)==IMAGETYPE_JPEG ) {

            $img = imagecreatefromjpeg($Qr_Icon_Image);

        } else if (exif_imagetype($Qr_Icon_Image)==IMAGETYPE_PNG) {

            $img = imagecreatefrompng($Qr_Icon_Image);

        } 

        // Obtener dimensiones del código QR y de la imagen

        $qr_width = imagesx($qr);

        $qr_height = imagesy($qr);

        $img_width = imagesx($img);

        $img_height = imagesy($img);

        // Calcular el tamaño máximo para el icono

        $porcentaje_tamanio = 0.15; // Porcentaje del tamaño del QR para el icono (ajústalo según sea necesario) de 2 lo bajamos a 1.5 para que no obstruya

        $icono_tamanio_max = min($qr_width, $qr_height) * $porcentaje_tamanio;

        

        // Redimensionar el icono proporcionalmente

        $icono_nuevo_ancho = $img_width;

        $icono_nuevo_alto = $img_height;

        if ($icono_nuevo_ancho > $icono_tamanio_max || $icono_nuevo_alto > $icono_tamanio_max) {

            $proporcion = $icono_tamanio_max / max($icono_nuevo_ancho, $icono_nuevo_alto);

            $icono_nuevo_ancho *= $proporcion;

            $icono_nuevo_alto *= $proporcion;

        }

        

        // Crear una imagen temporal para el icono redimensionado

        $icono_redimensionado = imagecreatetruecolor($icono_nuevo_ancho, $icono_nuevo_alto);

        imagealphablending($icono_redimensionado, false);

        imagesavealpha($icono_redimensionado, true);

        $color_transparente = imagecolorallocatealpha($icono_redimensionado, 0, 0, 0, 127);

        imagefill($icono_redimensionado, 0, 0, $color_transparente);

        imagecopyresampled($icono_redimensionado, $img, 0, 0, 0, 0, $icono_nuevo_ancho, $icono_nuevo_alto, $img_width, $img_height);

    

        // Calcular la posición donde se superpondrá la imagen (centrada)

        $pos_x = ($qr_width - $icono_nuevo_ancho) / 2;

        $pos_y = ($qr_height - $icono_nuevo_alto) / 2;

    

        // Superponer la imagen en el código QR

        imagecopy($qr, $icono_redimensionado, $pos_x, $pos_y, 0, 0, $icono_nuevo_ancho, $icono_nuevo_alto);

    

        // Guardar el código QR con la imagen superpuesta

        imagepng($qr, $filename);

        

        // Liberar memoria

        imagedestroy($img);

        imagedestroy($icono_redimensionado);

    }

    

    imagedestroy($qr);

    // Mostrar código QR (para propósitos de prueba)

    return $filename;

}



function updateQRCode($Dir_Qr, $filename, $url, $Hash_Qr, $size, $Qr_Icon_Image) {

    // Verifica si el archivo QR existe

    if (!file_exists($Dir_Qr . '/' . $filename)) {

        die("El archivo QR no existe.".$filename);

    }



    // Cargar el código QR existente

    //$qr = imagecreatefrompng($Dir_Qr . '/' . $filename);

    $tempFilename = $Dir_Qr . '/' . 'temp_' . $filename;

    QRcode::png($url.'?q='.$Hash_Qr, $tempFilename, QR_ECLEVEL_L, $size, 2);

    // Cargar el nuevo código QR generado

    $qr = imagecreatefrompng($tempFilename);

    // Verifica si el ícono existe y si es JPEG o PNG

    if (file_exists($Qr_Icon_Image) && (exif_imagetype($Qr_Icon_Image) == IMAGETYPE_JPEG || exif_imagetype($Qr_Icon_Image) == IMAGETYPE_PNG)) {

        if (exif_imagetype($Qr_Icon_Image) == IMAGETYPE_JPEG) {

            $img = imagecreatefromjpeg($Qr_Icon_Image);

        } else if (exif_imagetype($Qr_Icon_Image) == IMAGETYPE_PNG) {

            $img = imagecreatefrompng($Qr_Icon_Image);

        }

        

        // Obtener dimensiones del código QR y de la imagen

        $qr_width = imagesx($qr);

        $qr_height = imagesy($qr);

        $img_width = imagesx($img);

        $img_height = imagesy($img);



        // Calcular el tamanio máximo para el icono

        $porcentaje_tamanio = 0.15; // Porcentaje del tamaño del QR para el icono (ajústalo según sea necesario)

        $icono_tamanio_max = min($qr_width, $qr_height) * $porcentaje_tamanio;

        

        // Redimensionar el icono proporcionalmente

        $icono_nuevo_ancho = $img_width;

        $icono_nuevo_alto = $img_height;

        if ($icono_nuevo_ancho > $icono_tamanio_max || $icono_nuevo_alto > $icono_tamanio_max) {

            $proporcion = $icono_tamanio_max / max($icono_nuevo_ancho, $icono_nuevo_alto);

            $icono_nuevo_ancho *= $proporcion;

            $icono_nuevo_alto *= $proporcion;

        }

        

        // Crear una imagen temporal para el icono redimensionado

        $icono_redimensionado = imagecreatetruecolor($icono_nuevo_ancho, $icono_nuevo_alto);

        imagealphablending($icono_redimensionado, false);

        imagesavealpha($icono_redimensionado, true);

        $color_transparente = imagecolorallocatealpha($icono_redimensionado, 0, 0, 0, 127);

        imagefill($icono_redimensionado, 0, 0, $color_transparente);

        imagecopyresampled($icono_redimensionado, $img, 0, 0, 0, 0, $icono_nuevo_ancho, $icono_nuevo_alto, $img_width, $img_height);

    

        // Calcular la posición donde se superpondrá la imagen (centrada)

        $pos_x = ($qr_width - $icono_nuevo_ancho) / 2;

        $pos_y = ($qr_height - $icono_nuevo_alto) / 2;

    

        // Superponer la imagen en el código QR

        imagecopy($qr, $icono_redimensionado, $pos_x, $pos_y, 0, 0, $icono_nuevo_ancho, $icono_nuevo_alto);

    

        // Guardar el código QR con la imagen superpuesta

        imagepng($qr, $Dir_Qr . '/' . $filename);

        

        // Liberar memoria

        imagedestroy($img);

        imagedestroy($icono_redimensionado);

    }

    

    // Actualizar la URL del código QR

    //QRcode::png($url.'?t='.$Hash_Qr, $Dir_Qr . '/' . $filename, QR_ECLEVEL_L, $size, 2);

    // Cargar la imagen actualizada

    //$qr = imagecreatefrompng($Dir_Qr . '/' . $filename);

    //imagepng($qr, $Dir_Qr . '/' . $filename);

    

    // Liberar memoria

    imagedestroy($qr);

    // Eliminar el archivo temporal

    unlink($tempFilename);

}



function deleteDirectory($dir) {

    // Verifica si el directorio existe

    if (!file_exists($dir)) {

        return false;

    }



    // Si no es un directorio o es un enlace simbólico, elimina el archivo

    if (!is_dir($dir) || is_link($dir)) {

        return unlink($dir);

    }



    // Recorre todos los archivos y subdirectorios del directorio

    foreach (scandir($dir) as $item) {

        // Omite los directorios "." y ".."

        if ($item == '.' || $item == '..') {

            continue;

        }



        // Construye la ruta completa del archivo o subdirectorio

        $path = $dir . "/" . $item;



        // Elimina el archivo o subdirectorio de manera recursiva

        if (!deleteDirectory($path)) {

            // Si falla, cambia los permisos y vuelve a intentar eliminarlo

            chmod($path, 0777);

            if (!deleteDirectory($path)) {

                return false;

            }

        }

    }



    // Elimina el directorio

    return rmdir($dir);

}



?>