// app/sitemap.ts
// ─────────────────────────────────────────────────────────────
// Decent Woods — Dynamic XML Sitemap
// Covers: static pages + dynamic service/project pages
// Submitted to: Google Search Console & Bing Webmaster Tools
// ─────────────────────────────────────────────────────────────

import type { MetadataRoute } from 'next';
import { BRAND } from './lib/seo';

// Fetch dynamic slugs from your API (returns [] on failure)
async function fetchSlugs(endpoint: string): Promise<string[]> {
  try {
    const res = await fetch(`${BRAND.url}/api/v1/${endpoint}?fields=slug`, {
      next: { revalidate: 3600 },
    });
    if (!res.ok) return [];
    const data = await res.json();
    // Handle both { data: [...] } and [...] shapes
    const items = Array.isArray(data) ? data : (data.data ?? []);
    return items.map((item: any) => item.slug).filter(Boolean);
  } catch {
    return [];
  }
}

export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
  const base = BRAND.url;
  const now  = new Date();

  // ── Static pages ─────────────────────────────────────────
  const staticPages: MetadataRoute.Sitemap = [
    {
      url:              base,
      lastModified:     now,
      changeFrequency:  'weekly',
      priority:         1.0,
      alternates: {
        languages: { 'en-IN': base },
      },
    },
    {
      url:              `${base}/services`,
      lastModified:     now,
      changeFrequency:  'weekly',
      priority:         0.9,
    },
    {
      url:              `${base}/projects`,
      lastModified:     now,
      changeFrequency:  'weekly',
      priority:         0.85,
    },
    {
      url:              `${base}/quotation`,
      lastModified:     now,
      changeFrequency:  'monthly',
      priority:         0.9,
    },
    {
      url:              `${base}/about`,
      lastModified:     now,
      changeFrequency:  'monthly',
      priority:         0.7,
    },
    {
      url:              `${base}/contact`,
      lastModified:     now,
      changeFrequency:  'monthly',
      priority:         0.8,
    },
    {
      url:              `${base}/blog`,
      lastModified:     now,
      changeFrequency:  'daily',
      priority:         0.75,
    },
    // Location landing pages (great for local SEO)
    {
      url:              `${base}/ahmedabad`,
      lastModified:     now,
      changeFrequency:  'monthly',
      priority:         0.85,
    },
    {
      url:              `${base}/gandhinagar`,
      lastModified:     now,
      changeFrequency:  'monthly',
      priority:         0.8,
    },
  ];

  // ── Static service pages ──────────────────────────────────
  const serviceStaticSlugs = [
    'modular-kitchen',
    'wardrobe-design',
    'bedroom-interior',
    'living-room',
    'home-office',
    'full-home-interior',
    'commercial-space',
  ];
  const servicePages: MetadataRoute.Sitemap = serviceStaticSlugs.map(slug => ({
    url:             `${base}/services/${slug}`,
    lastModified:    now,
    changeFrequency: 'monthly' as const,
    priority:        0.85,
  }));

  // ── Dynamic project / portfolio pages ────────────────────
  const projectSlugs  = await fetchSlugs('projects');
  const projectPages: MetadataRoute.Sitemap = projectSlugs.map(slug => ({
    url:             `${base}/projects/${slug}`,
    lastModified:    now,
    changeFrequency: 'monthly' as const,
    priority:        0.7,
  }));

  // ── Dynamic blog pages ────────────────────────────────────
  const blogSlugs  = await fetchSlugs('blog');
  const blogPages: MetadataRoute.Sitemap = blogSlugs.map(slug => ({
    url:             `${base}/blog/${slug}`,
    lastModified:    now,
    changeFrequency: 'weekly' as const,
    priority:        0.65,
  }));

  return [
    ...staticPages,
    ...servicePages,
    ...projectPages,
    ...blogPages,
  ];
}