import type { MetadataRoute } from "next";

import { operationalCaseStudies } from "@/data/operational-case-studies";
import { api } from "@/lib/api";
import { absoluteUrl } from "@/lib/seo";

const staticRoutes = [
  "/",
  "/resenja",
  "/ecommerce-sistemi-po-meri",
  "/ecommerce-vise-prodavnica",
  "/bs-reporter",
  "/tracking-analytics",
  "/seo-aeo-geo-optimizacija",
  "/feedovi-marketplace-integracije",
  "/kurirske-integracije-logistika",
  "/ecommerce-automatizacija",
  "/kalkulator-ustede-ecommerce",
  "/pda-uredjaji-wms",
  "/beds24-hoteli-direktne-rezervacije",
  "/hotelska-resenja",
  "/vps-serveri-poslovna-infrastruktura",
  "/vps-serveri",
  "/pda-uredjaji",
  "/reference",
  "/case-studies",
  "/blog",
  "/kontakt",
  "/privatnost",
  "/politika-kolacica",
  "/uslovi-koriscenja",
];

export const dynamic = "force-dynamic";

function sitemapEntry(url: string, priority: number, changeFrequency: MetadataRoute.Sitemap[number]["changeFrequency"]) {
  return {
    url: absoluteUrl(url),
    lastModified: new Date(),
    changeFrequency,
    priority,
  };
}

export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
  const [servicesResult, blogResult, caseStudiesResult, pdaDevicesResult] = await Promise.all([
    api.services(),
    api.blog(),
    api.caseStudies(),
    api.pdaDevices(),
  ]);

  return [
    ...staticRoutes.map((route) => sitemapEntry(route, route === "/" ? 1 : 0.8, "weekly")),
    ...(servicesResult.ok
      ? servicesResult.data.map((service) => sitemapEntry(`/resenja/${service.slug}`, 0.75, "monthly"))
      : []),
    ...(blogResult.ok
      ? blogResult.data.map((post) => sitemapEntry(`/blog/${post.slug}`, 0.7, "weekly"))
      : []),
    ...(caseStudiesResult.ok
      ? caseStudiesResult.data.map((item) => sitemapEntry(`/reference/${item.slug}`, 0.7, "monthly"))
      : []),
    ...operationalCaseStudies.map((item) => sitemapEntry(`/case-studies/${item.slug}`, 0.75, "monthly")),
    ...(pdaDevicesResult.ok
      ? pdaDevicesResult.data.map((device) => sitemapEntry(`/pda-uredjaji/${device.slug}`, 0.6, "monthly"))
      : []),
  ];
}
