<?php

namespace App\Support;

use chillerlan\QRCode\Common\EccLevel;
use chillerlan\QRCode\QRCode;
use chillerlan\QRCode\QROptions;
use Throwable;

/**
 * QR embebido en PDF (data URI). El contenido es el payload de escaneo (típicamente `codigo_qr` de la orden).
 */
final class SeguimientoQr
{
    /**
     * @param  string  $payload  Texto a codificar (p. ej. `codigo_qr` o folio); no usar URL remota (DomPDF no la suele cargar).
     * @param  int  $scale  Tamaño en px de cada módulo del QR (2–8 recomendado; valores altos generan PNG enormes y DomPDF lo recorta).
     * @return string data:image/png;base64,... o cadena vacía si GD falla
     */
    public static function pngDataUri(string $payload, int $scale = 6): string
    {
        if ($payload === '') {
            return '';
        }

        $scale = max(2, min(10, $scale));

        try {
            $options = new QROptions([
                'outputType' => QRCode::OUTPUT_IMAGE_PNG,
                'outputBase64' => true,
                'eccLevel' => EccLevel::M,
                'scale' => $scale,
                'quietzoneSize' => 2,
            ]);

            return (new QRCode($options))->render($payload);
        } catch (Throwable) {
            return '';
        }
    }
}
