import type { MetadataRoute } from "next";
import { seoBlogPosts } from "@/data/seo/blog-posts";
import { enumerateAllSeoSlugs } from "@/lib/seo/registry";
import { SITE_URL } from "@/utils/constants";

const STATIC_ROUTES = [
  "",
  "/quem-somos",
  "/contratar",
  "/criar-app-website",
  "/blog",
  "/termos-de-uso",
  "/politica-de-privacidade",
  "/politica-anti-spam",
];

const URLS_PER_SITEMAP = 5000;

export async function generateSitemaps() {
  const total = enumerateAllSeoSlugs().length + STATIC_ROUTES.length + seoBlogPosts.length;
  const count = Math.max(1, Math.ceil(total / URLS_PER_SITEMAP));
  return Array.from({ length: count }, (_, id) => ({ id }));
}

export default async function sitemap({
  id,
}: {
  id: number;
}): Promise<MetadataRoute.Sitemap> {
  const now = new Date();
  const seoSlugs = enumerateAllSeoSlugs();
  const allEntries: MetadataRoute.Sitemap = [
    ...STATIC_ROUTES.map((path) => ({
      url: `${SITE_URL}${path}`,
      lastModified: now,
      changeFrequency: path === "" ? ("weekly" as const) : ("monthly" as const),
      priority: path === "" ? 1 : 0.7,
    })),
    ...seoBlogPosts.map((post) => ({
      url: `${SITE_URL}/blog/${post.slug}`,
      lastModified: new Date(post.publishedAt),
      changeFrequency: "monthly" as const,
      priority: 0.6,
    })),
    ...seoSlugs.map((slug) => ({
      url: `${SITE_URL}/${slug}`,
      lastModified: now,
      changeFrequency: "weekly" as const,
      priority: slug.includes("-em-") ? 0.75 : 0.65,
    })),
  ];

  const start = id * URLS_PER_SITEMAP;
  return allEntries.slice(start, start + URLS_PER_SITEMAP);
}
