<?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'] : '';

// Obtener el color de fondo desde el formulario

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

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

// Convertir el color 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($r, $g, $b) = sscanf($background_color, "#%02x%02x%02x");



//text color

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

list($rt, $gt, $bt) = sscanf($text_color, "#%02x%02x%02x");



$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();

//$pdf->AddPage();

// Establecer el color de fondo de la página

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

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





switch ($qr_size) {

    case 1:

        $x = 1.5;

        $frameSize = $qr_size * 12;

        break;

    case 3:

        $x = 13;

        $frameSize = $qr_size * 11;

        break;

    case 5:

        $x = 14;

        $frameSize = $qr_size * 11;

        break;

    case 10:

        $x = 2;

        $frameSize = $qr_size * 11;

        break;

}

$y = 2;

$padding = 3;

$text_height = 4;

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

    $qrImage = "";

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

    switch ($qr_size) {

        case 1:

            $qrImage = $row['Qr_Img1px'];

            break;

        case 3:

            $qrImage = $row['Qr_Img3px'];

            break;

        case 5:

            $qrImage = $row['Qr_Img5px'];

            break;

        case 10:

            $qrImage = $row['Qr_Img10px'];

            break;

    }



   

    //$pdf->Image($qrImage, $x, $y, $qr_size, $qr_size, '','','', false, 300, '', false, false, 0);

    //$pdf->Image($qrImage, $x, $y, 0, 0, '','','', false, 300, '', false, false, 0);

    // Obtener dimensiones de la imagen

    // Dibujar el marco alrededor de la imagen y el texto

    $borderThickness = 1;

    //$frameSize = $qr_size * 12; // Ajustar esto según sea necesario

    

    $pdf->SetDrawColor(0, 0, 0); // Color del marco (negro)

    $pdf->SetLineWidth($borderThickness);

    // Rellenar el fondo del marco con el color

    //$pdf->SetFillColor(230, 230, 230); // Color de fondo gris

    //$pdf->SetFillColor(255, 255, 255); // Color de fondo blanco

    $pdf->SetFillColor($r, $g, $b); // Color de fondo blanco

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

        $pdf->Rect($x, $y, $frameSize, $frameSize + $text_height + $padding,'DF');

    }else{

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

    }

     // Dibujar fondo blanco solo en el área de la imagen

    $pdf->SetFillColor(255, 255, 255); // Fondo blanco para la imagen

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

    // Añadir la imagen dentro del marco

    

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

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

    }else{

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

    }

    // Añadir el texto debajo de la imagen

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

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

    // Añadir el texto debajo de la imagen si es necesario

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

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

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

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

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

    }

    

   switch ($qr_size) {

        case 1:

            $x += 10 + $padding;

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

                $x = 1.5;

                $y += 10 + $padding;

            }

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

                //$pdf->AddPage();

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

                $x = 2;

                $y = 2;

            }

            break;

        case 3:

            $x += 38;

            //$x += 30 + $padding;

            if ($x + 38 > $pdf->getPageWidth()) {

                $x = 13;

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

                    $y += 43 + $padding;

                }else{

                    $y += 38 + $padding;

                }

            }

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

                //$pdf->AddPage();

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

                $x = 13;

                $y = 2;

            }

            break;

        case 5:

            $x += 60 + $padding;

            if ($x + 60  > $pdf->getPageWidth()) {

                $x = 14;

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

                    $y += 67 + $padding;

                }else{

                    $y += 60 + $padding;   

                }

            }

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

                //$pdf->AddPage();

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

                $x = 14;

                $y = 2;

            }

            break;

        case 10:

            $x += 120 + $padding;

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

                $x = 2;

                $y += 120 + $padding;

            }

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

                //$pdf->AddPage();

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

                $x = 2;

                $y = 2;

            }

            break;

    }

}





ob_end_clean();





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

?>