import type { MetadataRoute } from "next";
import { toolRegistry, type ToolCategory } from "@/tools/registry";

/**
 * Selbst-aktualisierende Sitemap.
 *
 * - Tool-Seiten werden automatisch aus der `toolRegistry` erzeugt: jedes neue
 *   Tool (auch importierte Kotsch-Tools) erscheint ohne weitere Änderung.
 * - Kategorie-Seiten werden automatisch ergänzt, sobald die Kategorie Tools hat.
 * - Statische Seiten sind zentral gepflegt.
 *
 * `force-dynamic` sorgt dafür, dass die Sitemap bei jedem Abruf frisch aus der
 * aktuellen Registry generiert wird – nichts muss manuell gepflegt werden.
 */
export const dynamic = "force-dynamic";

const BASE = (process.env.NEXT_PUBLIC_SITE_URL ?? "https://toolaro.org").replace(/\/$/, "");

// Stabiler Zeitstempel pro Deployment (Modul wird beim Serverstart einmal geladen).
// Dadurch ist <lastmod> bei jedem Deploy aktuell, aber innerhalb eines Deploys
// konsistent – das ist SEO-freundlicher als ein bei jedem Request wechselndes Datum.
const DEPLOY_TIME = new Date();

// Kategorien, die eine eigene Übersichtsseite unter /tools/<category> haben.
const CATEGORY_ROUTES: ToolCategory[] = [
  "text",
  "developer",
  "calculator",
  "security",
  "converter",
];

export default function sitemap(): MetadataRoute.Sitemap {
  // ── Statische Seiten ───────────────────────────────────────────────
  const staticPages: MetadataRoute.Sitemap = [
    { url: BASE, lastModified: DEPLOY_TIME, changeFrequency: "daily", priority: 1.0 },
    { url: `${BASE}/tools`, lastModified: DEPLOY_TIME, changeFrequency: "daily", priority: 0.9 },
    { url: `${BASE}/pricing`, lastModified: DEPLOY_TIME, changeFrequency: "monthly", priority: 0.6 },
    { url: `${BASE}/about`, lastModified: DEPLOY_TIME, changeFrequency: "monthly", priority: 0.5 },
    { url: `${BASE}/faq`, lastModified: DEPLOY_TIME, changeFrequency: "monthly", priority: 0.5 },
    { url: `${BASE}/contact`, lastModified: DEPLOY_TIME, changeFrequency: "yearly", priority: 0.3 },
    { url: `${BASE}/cookies`, lastModified: DEPLOY_TIME, changeFrequency: "yearly", priority: 0.2 },
    { url: `${BASE}/privacy`, lastModified: DEPLOY_TIME, changeFrequency: "yearly", priority: 0.2 },
    { url: `${BASE}/terms`, lastModified: DEPLOY_TIME, changeFrequency: "yearly", priority: 0.2 },
    { url: `${BASE}/imprint`, lastModified: DEPLOY_TIME, changeFrequency: "yearly", priority: 0.2 },
  ];

  // ── Kategorie-Seiten (nur wenn die Kategorie tatsächlich Tools hat) ──
  const categoryPages: MetadataRoute.Sitemap = CATEGORY_ROUTES.filter((cat) =>
    toolRegistry.some((tool) => tool.category === cat),
  ).map((cat) => ({
    url: `${BASE}/tools/${cat}`,
    lastModified: DEPLOY_TIME,
    changeFrequency: "weekly",
    priority: 0.7,
  }));

  // ── Tool-Seiten (automatisch aus der Registry) ──────────────────────
  const seen = new Set<string>();
  const toolPages: MetadataRoute.Sitemap = toolRegistry
    .filter((tool) => {
      // Doppelte Slugs überspringen (Kategorie-Routen haben Vorrang)
      if (seen.has(tool.slug) || CATEGORY_ROUTES.includes(tool.slug as ToolCategory)) {
        return false;
      }
      seen.add(tool.slug);
      return true;
    })
    .map((tool) => ({
      url: `${BASE}/tools/${tool.slug}`,
      lastModified: DEPLOY_TIME,
      changeFrequency: "monthly" as const,
      priority: tool.featured ? 0.8 : 0.6,
    }));

  return [...staticPages, ...categoryPages, ...toolPages];
}
