import type { MetadataRoute } from "next";
import { getNewsroomList } from "@/api/newsroom";
import { env } from "@/config/env";
import { services } from "@/data/services";

export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
  const baseUrl = env.siteUrl.replace(/\/$/, "");

  // Static site routes
  const staticRoutes: MetadataRoute.Sitemap = [
    {
      url: `${baseUrl}/`,
      lastModified: new Date(),
      changeFrequency: "daily",
      priority: 1.0,
    },
    {
      url: `${baseUrl}/services`,
      lastModified: new Date(),
      changeFrequency: "weekly",
      priority: 0.9,
    },
    {
      url: `${baseUrl}/membership-benefits`,
      lastModified: new Date(),
      changeFrequency: "weekly",
      priority: 0.9,
    },
    {
      url: `${baseUrl}/about-us`,
      lastModified: new Date(),
      changeFrequency: "monthly",
      priority: 0.8,
    },
    {
      url: `${baseUrl}/partnership-directory`,
      lastModified: new Date(),
      changeFrequency: "monthly",
      priority: 0.8,
    },
    {
      url: `${baseUrl}/newsroom`,
      lastModified: new Date(),
      changeFrequency: "daily",
      priority: 0.8,
    },
    {
      url: `${baseUrl}/newsfeed`,
      lastModified: new Date(),
      changeFrequency: "daily",
      priority: 0.8,
    },
    {
      url: `${baseUrl}/archives`,
      lastModified: new Date(),
      changeFrequency: "weekly",
      priority: 0.7,
    },
    {
      url: `${baseUrl}/privacy-policy`,
      lastModified: new Date(),
      changeFrequency: "yearly",
      priority: 0.4,
    },
  ];

  // Dynamic Service routes
  const serviceRoutes: MetadataRoute.Sitemap = services.map((service) => ({
    url: `${baseUrl}/services/${service.slug}`,
    lastModified: new Date(),
    changeFrequency: "weekly",
    priority: 0.85,
  }));

  // Dynamic Newsroom article routes
  let newsroomRoutes: MetadataRoute.Sitemap = [];
  try {
    const { pagination, latestRecords } = await getNewsroomList({ page: 1, limit: 150 });
    const allArticles = [...(latestRecords || []), ...(pagination?.docs || [])];
    const seenSlugs = new Set<string>();

    newsroomRoutes = allArticles
      .filter((article) => {
        const slug = article?.sl || article?._id;
        if (!slug || seenSlugs.has(slug)) return false;
        seenSlugs.add(slug);
        return true;
      })
      .map((article) => {
        const slug = article.sl || article._id;
        const articleDate = article.d || article.createdAt ? new Date(article.d || article.createdAt!) : new Date();
        return {
          url: `${baseUrl}/newsroom/${slug}`,
          lastModified: isNaN(articleDate.getTime()) ? new Date() : articleDate,
          changeFrequency: "weekly",
          priority: 0.7,
        };
      });
  } catch (error) {
    console.error("Error generating newsroom sitemap items:", error);
  }

  return [...staticRoutes, ...serviceRoutes, ...newsroomRoutes];
}
