<?php

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

require_once(ROOT_CONFIG);

require_once(ROOT_CONTROLLER . 'lote_qr.php');

require_once('tcpdf/tcpdf.php');



class qr_tag {

    public function get_qr_tag_by_lote_id($id) {

        $Odbj_conexion = new odbconexion;

        $conexion = $Odbj_conexion->openconection();

        $consulta = "SELECT * FROM qr_tag_appquadrata WHERE Id_Fk_Lote='$id'";

        $Array_adapter = $conexion->query($consulta);

        $data = array();

        if ($Array_adapter->num_rows > 0) {

            while ($row = $Array_adapter->fetch_assoc()) {

                $data[] = $row;

            }

        }

        $conexion->close();

        return $data;

    }

}



$lote_id = isset($_GET['id']) ? $_GET['id'] : null;

$qr_size = isset($_GET['qrSize']) ? intval($_GET['qrSize']) : 10;

$imprimir_codigo = isset($_GET['imprimir_codigo']) ? $_GET['imprimir_codigo'] : '';

$background_color = isset($_GET['background_color']) ? $_GET['background_color'] : '#e6e6e6';

$text_color = isset($_GET['text_color']) ? $_GET['text_color'] : '#000000';



// Función para convertir hexadecimal a RGB

function hexToRgb($hex) {

    $hex = str_replace("#", "", $hex);

    if (strlen($hex) == 3) {

        $r = hexdec(substr($hex, 0, 1) . substr($hex, 0, 1));

        $g = hexdec(substr($hex, 1, 1) . substr($hex, 1, 1));

        $b = hexdec(substr($hex, 2, 1) . substr($hex, 2, 1));

    } else {

        $r = hexdec(substr($hex, 0, 2));

        $g = hexdec(substr($hex, 2, 2));

        $b = hexdec(substr($hex, 4, 2));

    }

    return [$r, $g, $b];

}



list($r, $g, $b) = hexToRgb($background_color);

list($rt, $gt, $bt) = hexToRgb($text_color);



$allowed_sizes = [1, 3, 5, 10];

if (!in_array($qr_size, $allowed_sizes)) {

    $closest = null;

    $closest_distance = PHP_INT_MAX;

    foreach ($allowed_sizes as $size) {

        $distance = abs($qr_size - $size);

        if ($distance < $closest_distance) {

            $closest_distance = $distance;

            $closest = $size;

        }

    }

    $qr_size = $closest;

}



if (!$lote_id) {

    die("ID del lote no especificado.");

}



$qr_tag = new qr_tag();

$data = $qr_tag->get_qr_tag_by_lote_id($lote_id);



if (empty($data)) {

    die("Sin datos.");

}



function addColoredPage($pdf, $r, $g, $b) {

    $pdf->AddPage();

    $pdf->SetFillColor($r, $g, $b);

    $pdf->Rect(0, 0, $pdf->getPageWidth(), $pdf->getPageHeight(), 'F');

}



// Crear el PDF

$pdf = new TCPDF('P', 'mm', 'A4');

$pdf->SetMargins(10, 10, 10);

$pdf->SetAutoPageBreak(false, 0);

addColoredPage($pdf, $r, $g, $b);



// Configurar el tamaño del marco y las posiciones

 switch ($qr_size) {

    case 1:

        $x = 7;//margen lateral izquierdo

        $y= 2; //margen superior

        break;

    case 3:

        $x = 18;//margen lateral izquierdo

        if ($imprimir_codigo == 'Si'){

            $y = 5;//margen superior

        }else{

            $y = 10;//margen superior 

        }

        break;

    case 5:

        $x = 20;//margen lateral izquierdo

        if ($imprimir_codigo == 'Si'){

            $y = 22;//margen superior

        }else{

            $y = 7;//margen superior 

        }

        break;

    case 10:

        $x = 50;//margen lateral izquierdo

        if ($imprimir_codigo == 'Si'){

            $y = 30;//margen superior

        }else{

            $y = 35;//margen superior 

        }

        break;

}

$padding = 2;

$text_height = 4;



foreach ($data as $index => $row) {

    $qrImage = "";

    $qrHash = strtoupper($row['Hash_Tag_Qr']);

    switch ($qr_size) {

        case 1:

            $qrImage = $row['Qr_Img1px'];

            $frameSize = $qr_size * 12;

            break;

        case 3:

            $qrImage = $row['Qr_Img3px'];

            $frameSize = $qr_size * 11;

            break;

        case 5:

            $qrImage = $row['Qr_Img5px'];

            $frameSize = $qr_size * 11;

            break;

        case 10:

            $qrImage = $row['Qr_Img10px'];

            $frameSize = $qr_size * 11;

            break;

    }



    // Calcular la altura del bloque (marco + texto si es necesario)

    $blockHeight = $frameSize;

    if ($imprimir_codigo == 'Si' && $qr_size > 1) {

        $blockHeight += $text_height + $padding;

    }



    // Verifica si hay suficiente espacio en la página

    //if (($y + $frameSize + $padding) > ($pdf->getPageHeight() - $pdf->getMargins()['bottom'])) {

    if (($y + $frameSize + $padding) > $pdf->getPageHeight()) {

        addColoredPage($pdf, $r, $g, $b); // Añadir nueva página

        switch ($qr_size) {

            case 1:

                $x = 7;//margen lateral izquierdo

                $y= 2; //margen superior

                break;

            case 3:

                $x = 18;//margen lateral izquierdo

                if ($imprimir_codigo == 'Si'){

                    $y = 5;//margen superior

                }else{

                    $y = 10;//margen superior 

                }

                break;

            case 5:

                $x = 20;//margen lateral izquierdo

                if ($imprimir_codigo == 'Si'){

                    $y = 23;//margen superior

                }else{

                    $y = 7;//margen superior 

                }

                break;

            case 10:

                $x = 50;//margen lateral izquierdo

                if ($imprimir_codigo == 'Si'){

                    $y = 30;//margen superior

                }else{

                    $y = 35;//margen superior 

                }

                break;

        }

    }



    // Dibujar el marco

    $pdf->SetDrawColor(5, 5, 5);

    $pdf->SetLineWidth(1);

    $pdf->SetFillColor($r, $g, $b);

    $pdf->Rect($x, $y, $frameSize, $blockHeight, 'DF');



    // Fondo blanco para la imagen QR

    $pdf->SetFillColor(255, 255, 255);

    $pdf->Rect($x + $padding, $y + $padding, $frameSize - 2 * $padding, $frameSize - 2 * $padding, 'F');



    // Añadir la imagen QR dentro del marco

    if (!empty($qrImage)) {

        $pdf->SetXY($x + $padding, $y + $padding);

        $pdf->Image($qrImage, $x + $padding, $y + $padding, $frameSize - 2 * $padding, $frameSize - 2 * $padding, '', '', '', false, 150, '', false, false, 0);

    }



    // Añadir el texto si corresponde

    if ($imprimir_codigo == 'Si' && $qr_size > 1) {

        $pdf->SetTextColor($rt, $gt, $bt);

        $pdf->SetXY($x + $padding, $y + $frameSize + $padding);

        $pdf->Cell($frameSize - 2 * $padding, $text_height, $qrHash, 0, 1, 'C', 0, '', 0, false, 'M', 'M');

    }



    // Ajustar las posiciones para la siguiente imagen

    $x += $frameSize + $padding;

    

    // Verificar si la siguiente imagen cabe en la misma fila

    if ($x + $frameSize + $padding > $pdf->getPageWidth()) {

        //$x = 2;

        switch ($qr_size) {

            case 1:

                $x = 7;//margen lateral izquierdo

                break;

            case 3:

                $x = 18;//margen lateral izquierdo

                break;

            case 5:

                $x = 20;//margen lateral izquierdo

                break;

            case 10:

                $x = 50;//margen lateral izquierdo

                break;

        }

        $y += $blockHeight + $padding;

    }

}



ob_end_clean();

$pdf->Output('output.pdf', 'I');

