import type { MetadataRoute } from "next";

const SITE_URL = "https://technixhub.com";
const CMS_URL = "https://cms.technixhub.com/wp-json/wp/v2"; Revalidate sitemap every 1 hour (matches ISR revalidate on blog pages)
export const revalidate = 3600;

type WPPost = {
  slug: string;
  modified: string;
};

export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
  let posts: WPPost[] = [];

  try {
    const res = await fetch(
      `${CMS_URL}/posts?per_page=100&status=publish&_fields=slug,modified`,
      { next: { revalidate: 3600 } }
    );

    if (res.ok) {
      posts = await res.json();
    } else {
      console.error("Sitemap: CMS fetch failed with status", res.status);
    }
  } catch (error) {
    console.error("Sitemap: Error fetching posts from CMS:", error);
  }

  const staticPages: MetadataRoute.Sitemap = [
    {
      url: `${SITE_URL}`,
      lastModified: new Date(),
      changeFrequency: "weekly",
      priority: 1.0,
    },
    {
      url: `${SITE_URL}/blog`,
      lastModified: new Date(),
      changeFrequency: "daily",
      priority: 0.9,
    },
    {
      url: `${SITE_URL}/services`,
      lastModified: new Date(),
      changeFrequency: "monthly",
      priority: 0.8,
    },
    {
      url: `${SITE_URL}/write-for-us`,
      lastModified: new Date(),
      changeFrequency: "monthly",
      priority: 0.7,
    },
    {
      url: `${SITE_URL}/about`,
      lastModified: new Date(),
      changeFrequency: "monthly",
      priority: 0.7,
    },
    {
      url: `${SITE_URL}/contact`,
      lastModified: new Date(),
      changeFrequency: "yearly",
      priority: 0.6,
    },
    {
      url: `${SITE_URL}/privacy-policy`,
      lastModified: new Date(),
      changeFrequency: "yearly",
      priority: 0.3,
    },
    {
      url: `${SITE_URL}/terms-and-conditions`,
      lastModified: new Date(),
      changeFrequency: "yearly",
      priority: 0.3,
    },
  ];

  const blogPages: MetadataRoute.Sitemap = posts.map((post) => ({
    url: `${SITE_URL}/blog/${post.slug}/`,
    lastModified: new Date(post.modified),
    changeFrequency: "weekly",
    priority: 0.8,
  }));

  return [...staticPages, ...blogPages];
}