<?php
// Generador de QR para la app. QrLoader (glass) arma la URL así:
//     qr_url + urlencode("|" + str) + "&raw=1"
// y la carga como <img>. O sea qr_url DEBE ser un endpoint que reciba "data" y
// devuelva una imagen. Aquí generamos el QR de "data" y lo servimos como PNG.
// Por eso una imagen ESTÁTICA no sirve como qr_url: la app le concatena datos.
declare(strict_types=1);

$data = trim((string)($_GET['data'] ?? $_GET['text'] ?? ''));
if ($data === '') {
    http_response_code(400);
    header('Content-Type: text/plain; charset=utf-8');
    echo 'qr.php: falta ?data=';
    exit;
}
$size = (isset($_GET['size']) && ctype_digit((string)$_GET['size'])) ? (int)$_GET['size'] : 500;
$size = max(120, min(1000, $size));

// Generador público (sin API key). Lo servimos desde el propio panel (mismo origen,
// evita problemas de mixed-content/CORS en el WebView de la app).
$src = 'https://api.qrserver.com/v1/create-qr-code/?format=png&qzone=1&margin=0'
     . '&size=' . $size . 'x' . $size
     . '&data=' . rawurlencode($data);

$png = @file_get_contents($src);
if (($png === false || $png === '') && function_exists('curl_init')) {
    $ch = curl_init($src);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_TIMEOUT        => 8,
        CURLOPT_SSL_VERIFYPEER => false,
    ]);
    $png = curl_exec($ch);
    curl_close($ch);
}

if ($png !== false && $png !== '') {
    header('Content-Type: image/png');
    header('Content-Length: ' . strlen($png));
    echo $png;
    exit;
}

// Fallback: si el panel no pudo traer la imagen, que el WebView la pida directo.
header('Location: ' . $src);
