import path from "path";
import { applyLogoToPersistedImage } from "@/lib/generation/logo-overlay";
import { rasterizeSvgToPng } from "@/lib/generation/image-rasterize";
import {
  getLocalMediaPath,
  mediaApiUrl,
  resolveLocalMediaPath,
} from "@/lib/storage/media-files";

/**
 * Convert branded SVG to PNG (social APIs need raster).
 * Skips FFmpeg logo overlay when the SVG already embeds the brand logo (avoids double logo).
 */
export async function finalizePostImage(input: {
  postId: string;
  /** Unique per generation — prevents regenerate from rewriting the same filename. */
  mediaAssetId: string;
  imageApiUrl: string | null;
  logoDataUrl: string | null;
  skipLogoOverlay?: boolean;
}): Promise<string | null> {
  if (!input.imageApiUrl) return null;

  let imageApiUrl = input.imageApiUrl;
  const localPath = resolveLocalMediaPath(imageApiUrl);
  let convertedFromSvg = false;
  const assetId = path.basename(input.mediaAssetId || input.postId);

  if (localPath?.toLowerCase().endsWith(".svg")) {
    const pngPath = getLocalMediaPath(`${assetId}.png`);
    const converted = await rasterizeSvgToPng(localPath, pngPath, {
      width: 1080,
      height: 1080,
    });
    if (converted) {
      imageApiUrl = mediaApiUrl(`${assetId}.png`);
      convertedFromSvg = true;
    }
  }

  if (input.skipLogoOverlay || convertedFromSvg) {
    return imageApiUrl;
  }

  return applyLogoToPersistedImage({
    postId: assetId,
    imageApiUrl,
    logoDataUrl: input.logoDataUrl,
  });
}
