import QRCode from "qrcode";
import { mkdir, readFile, writeFile } from "fs/promises";
import path from "path";

const QR_DIR = path.join(process.cwd(), "storage", "qrcodes");

export function patientUrlForSlug(slug: string, baseUrl?: string): string {
  const base = baseUrl ?? process.env.APP_BASE_URL ?? "http://localhost:3000";
  return `${base}/b/${slug}`;
}

export async function generateAndSaveQrCode(slug: string, baseUrl?: string): Promise<string> {
  const url = patientUrlForSlug(slug, baseUrl);
  const buffer = await QRCode.toBuffer(url, { type: "png", width: 512, margin: 2 });
  await mkdir(QR_DIR, { recursive: true });
  const filename = `${slug}.png`;
  await writeFile(path.join(QR_DIR, filename), buffer);
  return filename;
}

export async function readQrCode(filename: string): Promise<Buffer> {
  return readFile(path.join(QR_DIR, filename));
}
