import type { MetadataRoute } from "next";
import { getSettings } from "@/lib/settings";
import { getSiteUrl } from "@/lib/seo";
import { connectDB } from "@/lib/db";
import { PortfolioItem } from "@/models/PortfolioItem";

const LOCALES = ["de", "en"] as const;
// Nur echte öffentliche Inhaltsseiten — keine Auth-/Konto-/Admin-Routen.
const STATIC_PATHS = ["", "/portfolio", "/ueber-mich", "/angebote", "/faq", "/datenschutz", "/gutscheine", "/conventions", "/blog"];

// Sonst prerendert Next diese Route einmalig zur Build-Zeit — neue
// Portfolio-Beiträge oder die "indexable"-Einstellung würden dann nie
// aktualisiert ausgeliefert.
export const dynamic = "force-dynamic";

export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
  const settings = await getSettings();
  if (settings.seoSettings?.indexable === false) return [];

  const siteUrl = getSiteUrl();

  await connectDB();
  const latestPortfolioItem = await PortfolioItem.findOne({ visible: true }).sort({ updatedAt: -1 }).select("updatedAt").lean();
  const portfolioLastMod = latestPortfolioItem?.updatedAt ?? new Date();

  const entries: MetadataRoute.Sitemap = [];
  for (const path of STATIC_PATHS) {
    for (const locale of LOCALES) {
      entries.push({
        url: `${siteUrl}/${locale}${path}`,
        lastModified: path === "/portfolio" ? portfolioLastMod : new Date(),
        changeFrequency: path === "" ? "weekly" : path === "/portfolio" ? "weekly" : "monthly",
        priority: path === "" ? 1 : path === "/portfolio" ? 0.9 : 0.5,
        alternates: {
          languages: Object.fromEntries(LOCALES.map((l) => [l, `${siteUrl}/${l}${path}`])),
        },
      });
    }
  }
  return entries;
}
