import type { Metadata } from "next";
import { getSettings } from "@/lib/settings";

export function getSiteUrl(): string {
  return process.env.SITE_URL || "https://v2.rakku.de";
}

// Gemeinsame Metadaten-Bausteine (Titel, Social-Preview-Bild, Indexierbarkeit)
// für alle öffentlichen Seiten — ein Aufruf statt wiederholter openGraph-/
// twitter-/alternates-Bausteine pro Seite.
//
// Titel-Format ist bewusst FEST im Code verankert statt über eine frei
// editierbare Einstellung (früher "metaTitleSuffix") — genau das freie
// Textfeld führte dazu, dass Seiten uneinheitlich mal "X · Rakku
// Photography", mal nur "X" im Titel hatten. Jetzt gilt überall exakt:
// "Rakku Photography" (Startseite, kein title-Parameter) oder
// "Rakku Photography | Unterseitenname" (title-Parameter gesetzt).
export async function buildPageMetadata({
  locale,
  path,
  title,
  description,
  noindex = false,
}: {
  locale: string;
  path: string;
  // Name der Unterseite, z. B. "Portfolio" — ergibt "Rakku Photography |
  // Portfolio". Weggelassen (undefined) für die Startseite selbst, ergibt
  // dann nur "Rakku Photography".
  title?: string;
  description: string;
  noindex?: boolean;
}): Promise<Metadata> {
  const settings = await getSettings();
  const seo = settings.seoSettings;
  const siteName = settings.invoiceSettings?.businessName || "Rakku Photography";
  const fullTitle = title ? `${siteName} | ${title}` : siteName;
  const ogImage = seo?.ogImage || "/img/hero.jpg";
  const canonicalPath = `/${locale}${path}`;
  const indexable = !noindex && seo?.indexable !== false;

  return {
    title: fullTitle,
    description,
    keywords: (locale === "en" ? seo?.keywordsEn || seo?.keywords : seo?.keywords) || undefined,
    robots: indexable
      ? { index: true, follow: true }
      : { index: false, follow: false },
    alternates: {
      canonical: canonicalPath,
      languages: {
        de: `/de${path}`,
        en: `/en${path}`,
      },
    },
    openGraph: {
      type: "website",
      title: fullTitle,
      description,
      url: canonicalPath,
      siteName,
      images: [{ url: ogImage }],
      locale: locale === "de" ? "de_DE" : "en_US",
    },
    twitter: {
      card: "summary_large_image",
      title: fullTitle,
      description,
      images: [ogImage],
    },
  };
}
