import type { MetadataRoute } from 'next';

const SITE = process.env.NEXT_PUBLIC_SITE_URL || 'http://localhost:3100';
const API = process.env.NEXT_PUBLIC_API_URL;

async function safeGet(url: string) {
  try {
    const res = await fetch(url, { next: { revalidate: 3600 } });
    if (!res.ok) return [];
    const json = await res.json();
    return json.data || json.articles || json.categories || json || [];
  } catch {
    return [];
  }
}

export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
  const [articles, categories] = await Promise.all([
    safeGet(`${API}/articles?limit=500&status=published`),
    safeGet(`${API}/categories`),
  ]);

  const staticRoutes: MetadataRoute.Sitemap = ['', '/search', '/about', '/contact', '/privacy', '/terms'].map((p) => ({
    url: `${SITE}${p}`,
    changeFrequency: 'daily',
    priority: p === '' ? 1 : 0.5,
  }));

  const categoryRoutes: MetadataRoute.Sitemap = (categories as any[]).map((c) => ({
    url: `${SITE}/category/${c.slug}`,
    changeFrequency: 'daily',
    priority: 0.7,
  }));

  const articleRoutes: MetadataRoute.Sitemap = (articles as any[]).map((a) => ({
    url: `${SITE}/article/${a.slug}`,
    lastModified: a.updatedAt || a.publishedAt || undefined,
    changeFrequency: 'weekly',
    priority: 0.8,
  }));

  return [...staticRoutes, ...categoryRoutes, ...articleRoutes];
}
