export interface DownloadableImage {
  previewUrl?: string | null;
  originalFileName?: string | null;
  id: string;
}

/**
 * Leitet die Dateiendung aus der Vorschau-URL ab — bei Data-URLs aus dem
 * MIME-Type (image/avif → .avif), sonst aus dem Pfad.
 */
export function imageExtensionFromUrl(url: string): string {
  const dataMatch = url.match(/^data:image\/([a-z0-9.+-]+);/i);
  if (dataMatch) {
    const mime = dataMatch[1].toLowerCase();
    return mime === "jpeg" ? "jpg" : mime;
  }
  const pathMatch = url.split("?")[0].match(/\.([a-z0-9]{2,5})$/i);
  return pathMatch ? pathMatch[1].toLowerCase() : "jpg";
}

/**
 * Lädt das Belegbild als Datei herunter. Funktioniert für Data-URLs (Storage in
 * DB/IndexedDB) und Blob-URLs; bei fehlender Vorschau wird nichts getan.
 */
export function downloadReceiptImage(receipt: DownloadableImage): boolean {
  const url = receipt.previewUrl;
  if (!url) return false;

  const ext = imageExtensionFromUrl(url);
  const baseName =
    (receipt.originalFileName || receipt.id || "receipt")
      .replace(/\.[a-z0-9]{2,5}$/i, "")
      .replace(/[^\p{L}\p{N}\-_. ]+/gu, "_")
      .trim()
      .slice(0, 80) || "receipt";

  const anchor = document.createElement("a");
  anchor.href = url;
  anchor.download = `${baseName}.${ext}`;
  anchor.style.display = "none";
  document.body.appendChild(anchor);
  anchor.click();
  document.body.removeChild(anchor);
  return true;
}