// QR code helper — usa o serviço público qrserver.com via <img>.
//
// Por que não bundlar uma lib JS própria de QR code:
//   - Libs de QR code completas pesam 30-80 KB minified (algoritmo de RS + alignment + bitstream).
//   - Implementação custom curta tem bugs sutis em strings longas (PIX BR codes ~250 chars).
//   - Política CSP do MV3 permite carregar imagens remotas — só proíbe eval de scripts remotos.
//   - qrserver.com não exige API key, tem rate limit alto, e a URL é determinística.
//
// Se algum dia quisermos 100% offline:
//   1. baixar https://cdn.jsdelivr.net/npm/[email protected]/build/qrcode.min.js
//   2. colocar em public/qrcode.min.js
//   3. trocar essa lib pelo wrapper de QRCode.toDataURL(...)

const QR_BASE = 'https://api.qrserver.com/v1/create-qr-code/';

// Retorna a URL pública de um QR code (escala 8 = ~240px pra textos pequenos).
// Pra PIX BR codes (~250 chars), usa "ecc=M" e o serviço escolhe a versão.
export function qrCodeImgUrl(text, { size = 240, margin = 1 } = {}) {
  const params = new URLSearchParams({
    data: text,
    size: `${size}x${size}`,
    margin: String(margin),
    ecc: 'M',
    format: 'png'
  });
  return `${QR_BASE}?${params.toString()}`;
}

// Pra usar como <img src>:
//   img.src = qrCodeImgUrl(pixCode)
//
// Pra inline (data URL via fetch — pra evitar request a cada repaint):
export async function qrCodeDataUrl(text, opts = {}) {
  const r = await fetch(qrCodeImgUrl(text, opts));
  if (!r.ok) throw new Error(`QR service HTTP ${r.status}`);
  const blob = await r.blob();
  return new Promise((resolve, reject) => {
    const fr = new FileReader();
    fr.onload = () => resolve(fr.result);
    fr.onerror = reject;
    fr.readAsDataURL(blob);
  });
}
