import type { Metadata } from "next";

type MediaSize = "small" | "medium" | "large" | "og";

const CMS_BASE_URL = process.env.NEXT_PUBLIC_CMS_BASE_URL;

function media(payload: any, id?: number, size: MediaSize = "small") {
  if (!id) return null;
  const m =
    payload?.included?.media?.[String(id)] || payload?.included?.media?.[id];
  return m?.sizes?.[size]?.url || m?.url || null;
}

function abs(path?: string | null) {
  if (!path) return null;
  if (!path.startsWith("http") && !CMS_BASE_URL) {
    return null;
  }

  let url = path.startsWith("http") ? path : `${CMS_BASE_URL}${path}`;
  if (
    url.startsWith("https://storage.googleapis.com/test-csm-ptichbook/") &&
    !url.includes("/karmapitchbookimages/")
  ) {
    url = url.replace(
      "https://storage.googleapis.com/test-csm-ptichbook/",
      "https://storage.googleapis.com/test-csm-ptichbook/karmapitchbookimages/",
    );
  }
  return url;
}

export function buildMetadataFromCMS(payload: any): Metadata {
  const meta = payload?.meta || payload?.page?.meta || {};
  const title = meta?.title || payload?.page?.title || undefined;
  const description = meta?.description || undefined;
  const imageId = meta?.image;
  const imageUrl =
    abs(media(payload, imageId, "og")) ||
    abs(media(payload, imageId, "large")) ||
    abs(media(payload, imageId, "medium")) ||
    abs(media(payload, imageId, "small")) ||
    abs(media(payload, imageId));
  const fallbackImage = "/Karma_logo.png";
  const ogImage = imageUrl || fallbackImage;

  return {
    title,
    description,
    openGraph: {
      title,
      description,
      images: ogImage ? [{ url: ogImage }] : undefined,
    },
    twitter: {
      card: ogImage ? "summary_large_image" : "summary",
      title,
      description,
      images: ogImage ? [ogImage] : undefined,
    },
  };
}
