import type { MetadataRoute } from "next";

import { siteConfig } from "@/config/site.config";
import { blogSlugs } from "@/data/blogs.data";
import { locales } from "@/lib/locales";
import { localizedPath, marketingSlugs, productSlugs } from "@/lib/routes";

const lastModified = new Date("2026-06-04T00:00:00.000Z");

function getPriority(path: string) {
  if (path === "") return 1;
  if (path === "/products") return 0.95;
  if (path.startsWith("/products/")) return 0.9;
  if (path === "/blogs") return 0.85;
  if (path.startsWith("/blogs/")) return 0.75;
  if (path === "/about") return 0.8;
  if (path === "/contact" || path === "/demo") return 0.75;
  return 0.6;
}

function getChangeFrequency(path: string): MetadataRoute.Sitemap[number]["changeFrequency"] {
  if (path === "" || path === "/blogs") return "weekly";
  if (path.startsWith("/blogs/")) return "monthly";
  return "monthly";
}

export default function sitemap(): MetadataRoute.Sitemap {
  const paths = [
    "",
    "/products",
    ...productSlugs.map((slug) => `/products/${slug}`),
    "/about",
    "/blogs",
    ...blogSlugs.map((slug) => `/blogs/${slug}`),
    ...marketingSlugs.map((slug) => `/${slug}`),
  ];

  return locales.flatMap((locale) =>
    paths.map((path) => ({
      url: `${siteConfig.url}${localizedPath(locale, path)}`,
      lastModified,
      changeFrequency: getChangeFrequency(path),
      priority: getPriority(path),
      alternates: {
        languages: Object.fromEntries(
          locales.map((supportedLocale) => [
            supportedLocale,
            `${siteConfig.url}${localizedPath(supportedLocale, path)}`,
          ]),
        ),
      },
    })),
  );
}
