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

export const dynamic = "force-dynamic";

export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
  const base = process.env.NEXT_PUBLIC_APP_URL ?? "http://localhost:3000";
  const [materials, articles, projects, galleries, activities] = await Promise.all([
    prisma.material.findMany({ where: { status: "PUBLISHED", visibility: "PUBLIC" }, select: { slug: true, updatedAt: true } }),
    prisma.article.findMany({ where: { status: "PUBLISHED" }, select: { slug: true, updatedAt: true } }),
    prisma.project.findMany({ where: { status: "PUBLISHED" }, select: { slug: true, updatedAt: true } }),
    prisma.gallery.findMany({ select: { slug: true, updatedAt: true } }),
    prisma.activity.findMany({ select: { slug: true, updatedAt: true } }),
  ]);
  const fixed = ["", "materi", "artikel", "project", "galeri", "kegiatan", "prestasi-siswa", "download", "tentang", "cari"].map((route) => ({
    url: `${base}/${route}`,
    changeFrequency: "weekly" as const,
    priority: route ? 0.7 : 1,
  }));
  return [
    ...fixed,
    ...materials.map((item) => ({ url: `${base}/materi/${item.slug}`, lastModified: item.updatedAt })),
    ...articles.map((item) => ({ url: `${base}/artikel/${item.slug}`, lastModified: item.updatedAt })),
    ...projects.map((item) => ({ url: `${base}/project/${item.slug}`, lastModified: item.updatedAt })),
    ...galleries.map((item) => ({ url: `${base}/galeri/${item.slug}`, lastModified: item.updatedAt })),
    ...activities.map((item) => ({ url: `${base}/kegiatan/${item.slug}`, lastModified: item.updatedAt })),
  ];
}
