/**
 * qrService.js — Generación de códigos QR.
 * Sustituye el bloque QRious duplicado 4× dentro de pdfcreator.js.
 *
 * ORIGEN v1: loadScriptapp('qrious.min.js') + new QRious({...}) repetido 4 veces
 *            (upload=true/false × función 4x4/4x3), siempre con los mismos parámetros salvo `value`.
 */

import { SERVER_URL, PATHS, PWA } from '../config.js';

// Carga qrious una sola vez (idempotente)
let _qriousReady = false;
async function _ensureQrious() {
  if (_qriousReady || window.QRious) { _qriousReady = true; return; }
  await new Promise((resolve, reject) => {
    const s = document.createElement('script');
    s.src = `${SERVER_URL}/js/qrious.min.js`;  // ruta igual que v1
    s.onload  = () => { _qriousReady = true; resolve(); };
    s.onerror = () => reject(new Error('No se pudo cargar qrious.min.js'));
    document.head.appendChild(s);
  });
}

/**
 * Genera un QR en el elemento <canvas> con id `elementId` y devuelve la data URL.
 * @param {string} value  — contenido del QR (URL de la PWA paciente o del PDF)
 * @param {string} [elementId='qr_code']
 * @returns {Promise<HTMLCanvasElement>} — el elemento actualizado
 */
export async function generateQR(value, elementId = 'qr_code') {
  await _ensureQrious();
  const el = document.getElementById(elementId);
  if (!el) throw new Error(`[qrService] Elemento #${elementId} no encontrado`);
  new window.QRious({
    element: el,
    background: '#ffffff',
    backgroundAlpha: 1,
    foreground: '#000000',
    foregroundAlpha: 1,
    level: 'H',
    padding: 0,
    size: 500,
    value,
  });
  return el;
}

/**
 * Construye la URL que abrirá la PWA del paciente al escanear el QR.
 * Formato: /ias/index.html?{username}#{titulo}_{registro},{lista_ordenOri}
 */
export function buildPatientURL({ username, qrTitulo, qrRegistro, totalMp4Lite, useRehab = false }) {
  const base = useRehab ? PWA.rehab : PWA.paciente;
  return `${base}?${username}#${qrTitulo}_${qrRegistro}${totalMp4Lite}`;
}

/**
 * Construye la URL del PDF subido al servidor (modo upload).
 */
export function buildUploadURL(nameSave) {
  return `${PATHS.pdfs}${nameSave}`;
}

/**
 * Convierte título y registro en un nombre de fichero PDF válido.
 * Elimina caracteres especiales y espacios → snake_case + timestamp base36.
 */
export function buildPdfFilename(codigoPdf, titulo, registro = '') {
  const clean = (s) => s.toLowerCase().replace(/ +/g, '_').replace(/[^0-9a-z_]/g, '');
  const qrTitulo   = clean(`${codigoPdf}${titulo}`);
  const qrRegistro = Date.now().toString(36);
  return { qrTitulo, qrRegistro, nameSave: `${qrTitulo}_${qrRegistro}.pdf` };
}
