import { writeFile, mkdir } from "fs/promises";
import path from "path";
import crypto from "crypto";

// Penyimpanan foto bukti kurir.
// FASE 1 (bawaan): simpan ke /public/uploads (lokal).
// PRODUKSI: ganti STORAGE_DRIVER=s3 dan implementasikan uploadToS3 (signed URL).
// Master prompt: JANGAN simpan foto sebagai BLOB di database.
const UPLOAD_DIR = path.join(process.cwd(), "public", "uploads");

// Terima data URL (data:image/jpeg;base64,....) → simpan → kembalikan url publik.
export async function saveDataUrl(dataUrl: string): Promise<string> {
  const match = /^data:image\/([-.\w+]+);base64,(.+)$/i.exec(dataUrl);
  if (!match) throw new Error("Format foto tidak valid (harus data URL base64)");
  const ext = match[1].toLowerCase().replace("jpeg", "jpg");
  const buf = Buffer.from(match[2], "base64");

  if (process.env.STORAGE_DRIVER === "s3") {
    // TODO produksi: upload ke S3/MinIO lalu kembalikan signed URL.
    throw new Error("Driver S3 belum dikonfigurasi (set kredensial di .env)");
  }

  await mkdir(UPLOAD_DIR, { recursive: true });
  const name = `${Date.now()}-${crypto.randomBytes(6).toString("hex")}.${ext}`;
  await writeFile(path.join(UPLOAD_DIR, name), buf);
  return `/uploads/${name}`;
}
