import { getPublicSiteAbsoluteUrl, getPublicSiteUrl } from "@/lib/mail-urls";

export const INDEX_NOW_KEY = "0355347f481c4c7190d4a19dbf22eaf4";

function canonicalPublicUrl(pathOrUrl: string) {
  const baseUrl = new URL(getPublicSiteUrl());
  const url = new URL(pathOrUrl, baseUrl);

  if (url.host !== baseUrl.host) {
    return null;
  }

  url.hash = "";
  return url.toString();
}

export async function submitIndexNowUrls(paths: string[]) {
  if (process.env.NODE_ENV !== "production" && process.env.INDEX_NOW_ENABLED !== "true") {
    return;
  }

  const baseUrl = new URL(getPublicSiteUrl());
  const urlList = Array.from(
    new Set(paths.map(canonicalPublicUrl).filter((url): url is string => Boolean(url))),
  ).slice(0, 10_000);

  if (urlList.length === 0) {
    return;
  }

  try {
    const response = await fetch("https://api.indexnow.org/indexnow", {
      method: "POST",
      headers: {
        "Content-Type": "application/json; charset=utf-8",
      },
      body: JSON.stringify({
        host: baseUrl.host,
        key: INDEX_NOW_KEY,
        keyLocation: getPublicSiteAbsoluteUrl(`/${INDEX_NOW_KEY}.txt`),
        urlList,
      }),
      signal: AbortSignal.timeout(8_000),
    });

    if (!response.ok && response.status !== 202) {
      console.error("[index-now] submission failed", {
        status: response.status,
        urls: urlList,
      });
    }
  } catch (error) {
    console.error("[index-now] submission failed", error);
  }
}
