import QRCode from "qrcode";
import { randomBytes } from "crypto";
import { getParametres } from "./parametresDb";

/**
 * Générer un token unique pour le QR code
 */
export function generateQRToken(): string {
  return randomBytes(32).toString("hex");
}

/**
 * Générer un QR code en base64 à partir d'un token
 * @param token Le token unique de la séquence
 * @returns Une image QR code en base64 (data URL)
 */
export async function generateQRCodeDataURL(token: string): Promise<string> {
  // URL complète pour scanner le QR code
  const parametres = await getParametres();
  const url = `${parametres.urlPublique}/emargement/${token}`;
  
  try {
    const qrCodeDataURL = await QRCode.toDataURL(url, {
      errorCorrectionLevel: "H",
      type: "image/png",
      width: 400,
      margin: 2,
      color: {
        dark: "#000000",
        light: "#FFFFFF",
      },
    });
    
    return qrCodeDataURL;
  } catch (error) {
    console.error("Erreur lors de la génération du QR code:", error);
    throw new Error("Impossible de générer le QR code");
  }
}

/**
 * Générer un QR code en buffer PNG
 * @param token Le token unique de la séquence
 * @returns Un buffer PNG du QR code
 */
export async function generateQRCodeBuffer(token: string): Promise<Buffer> {
  const parametres = await getParametres();
  const url = `${parametres.urlPublique}/emargement/${token}`;
  
  try {
    const buffer = await QRCode.toBuffer(url, {
      errorCorrectionLevel: "H",
      type: "png",
      width: 400,
      margin: 2,
    });
    
    return buffer;
  } catch (error) {
    console.error("Erreur lors de la génération du QR code:", error);
    throw new Error("Impossible de générer le QR code");
  }
}
