import type { MetadataRoute } from "next";
import { db } from "@/lib/db";
import { absoluteUrl } from "@/lib/seo";

/** Refresh sitemap content hourly; admin edits revalidate pages anyway. */
export const revalidate = 3600;

/** Indexable public pages only: no /play (thin), no /admin, no /api. */
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
  const [games, categories] = await Promise.all([
    db.game.findMany({
      where: { status: "published" },
      select: { slug: true, updatedAt: true },
      orderBy: { updatedAt: "desc" },
    }),
    db.category.findMany({ select: { slug: true }, orderBy: { slug: "asc" } }),
  ]);

  return [
    { url: absoluteUrl("/"), changeFrequency: "daily", priority: 1 },
    { url: absoluteUrl("/games"), changeFrequency: "daily", priority: 0.9 },
    {
      url: absoluteUrl("/categories"),
      changeFrequency: "weekly",
      priority: 0.7,
    },
    { url: absoluteUrl("/about"), changeFrequency: "monthly", priority: 0.4 },
    ...categories.map((c) => ({
      url: absoluteUrl(`/category/${c.slug}`),
      changeFrequency: "weekly" as const,
      priority: 0.7,
    })),
    ...games.map((g) => ({
      url: absoluteUrl(`/games/${g.slug}`),
      lastModified: g.updatedAt,
      changeFrequency: "weekly" as const,
      priority: 0.8,
    })),
  ];
}
