/**
 * نقشه سایت (/sitemap.xml) برای موتورهای جستجو.
 * شامل صفحات ثابت، همه دسته‌ها، برندها و محصولات فعال. آدرس‌های فارسی به‌صورت percent-encoded نوشته می‌شوند.
 */
import type { MetadataRoute } from "next";
import { site } from "@/lib/site";
import { getAllProductRefs, getBrands, getCategoryIndex } from "@/server/services/catalog";
import { getAllArticleRefs } from "@/server/services/magazine";

export const revalidate = 3600;

const abs = (path: string) => new URL(encodeURI(path), site.url).toString();

export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
  const [products, brands, cats, articles] = await Promise.all([getAllProductRefs(), getBrands(), getCategoryIndex(), getAllArticleRefs()]);
  const now = new Date();

  const pages: MetadataRoute.Sitemap = [
    { url: abs("/"), lastModified: now, changeFrequency: "daily", priority: 1 },
    { url: abs("/brands"), lastModified: now, changeFrequency: "weekly", priority: 0.6 },
    { url: abs("/mag"), lastModified: articles[0]?.updatedAt ?? now, changeFrequency: "daily", priority: 0.7 },
    ...["/about", "/contact", "/terms", "/privacy", "/track"].map((p) => ({ url: abs(p), changeFrequency: "yearly" as const, priority: 0.3 })),
  ];

  return [
    ...pages,
    ...cats.all.map((c) => ({ url: abs(cats.href(c.id)), lastModified: now, changeFrequency: "daily" as const, priority: c.parentId ? 0.7 : 0.8 })),
    ...brands.map((b) => ({ url: abs(`/brand/${b.slug}`), changeFrequency: "weekly" as const, priority: 0.6 })),
    ...articles.map((a) => ({ url: abs(`/mag/${a.slug}`), lastModified: a.updatedAt, changeFrequency: "monthly" as const, priority: 0.7 })),
    ...products.map((p) => ({ url: abs(`/p/${p.id}/${p.slug}`), lastModified: p.updatedAt, changeFrequency: "weekly" as const, priority: 0.9 })),
  ];
}
