import type { MetadataRoute } from "next";

interface SitemapRoute {
  url: string;
  lastModified: string;
  changeFrequency?:
    | "always"
    | "hourly"
    | "daily"
    | "weekly"
    | "monthly"
    | "yearly"
    | "never";
  priority?: number;
}

export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
  const baseUrl = "https://dki.one";

  try {
    const response = await fetch(`${baseUrl}/api/sitemap`);
    if (!response.ok) {
      throw new Error(`Failed to fetch sitemap: ${response.statusText}`);
    }

    const sitemapData = (await response.json()) as SitemapRoute[];

    return sitemapData.map((route) => {
      const config: Record<
        string,
        { changeFrequency: SitemapRoute["changeFrequency"]; priority: number }
      > = {
        [`${baseUrl}/`]: { changeFrequency: "weekly", priority: 1.0 },
      };

      if (route.url.startsWith(`${baseUrl}/projects`)) {
        config[route.url] = { changeFrequency: "monthly", priority: 0.8 };
      } else if (route.url.startsWith(`${baseUrl}/blog`)) {
        config[route.url] = { changeFrequency: "weekly", priority: 0.6 };
      } else {
        config[route.url] = { changeFrequency: "monthly", priority: 0.5 };
      }

      return {
        url: route.url,
        lastModified: route.lastModified,
        ...config[route.url],
      };
    });
  } catch (error) {
    console.error("Failed to fetch dynamic sitemap, using fallback:", error);

    return [
      {
        url: `${baseUrl}/`,
        lastModified: new Date().toISOString(),
        changeFrequency: "weekly",
        priority: 1.0,
      },
      {
        url: `${baseUrl}/privacy-policy`,
        lastModified: new Date().toISOString(),
        changeFrequency: "yearly",
        priority: 0.3,
      },
      {
        url: `${baseUrl}/legal-notice`,
        lastModified: new Date().toISOString(),
        changeFrequency: "yearly",
        priority: 0.3,
      },
    ];
  }
}
