import { MetadataRoute } from 'next';
import { absoluteSiteUrl } from '@/lib/seo';

const API_URL = process.env.INTERNAL_API_URL || 'http://127.0.0.1:3021';
const STATIC_HUBS = [
  'nba',
  'mlb',
  'nhl',
  'ncaab',
  'mma',
  'epl',
  'serie_a',
  'la_liga',
  'bundesliga',
  'ligue_1',
  'champions_league',
];

export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
  const entries: MetadataRoute.Sitemap = [
    {
      url: absoluteSiteUrl('/'),
      lastModified: new Date(),
      changeFrequency: 'daily',
      priority: 1.0,
    },
    {
      url: absoluteSiteUrl('/rain-wire'),
      lastModified: new Date(),
      changeFrequency: 'hourly',
      priority: 0.9,
    },
    {
      url: absoluteSiteUrl('/forecast'),
      lastModified: new Date(),
      changeFrequency: 'daily',
      priority: 0.8,
    },
    {
      url: absoluteSiteUrl('/forecasts'),
      lastModified: new Date(),
      changeFrequency: 'daily',
      priority: 0.8,
    },
    {
      url: absoluteSiteUrl('/pricing'),
      lastModified: new Date(),
      changeFrequency: 'weekly',
      priority: 0.7,
    },
    {
      url: absoluteSiteUrl('/performance'),
      lastModified: new Date(),
      changeFrequency: 'weekly',
      priority: 0.7,
    },
    {
      url: absoluteSiteUrl('/signup'),
      lastModified: new Date(),
      changeFrequency: 'weekly',
      priority: 0.65,
    },
    {
      url: absoluteSiteUrl('/affiliate'),
      lastModified: new Date(),
      changeFrequency: 'monthly',
      priority: 0.55,
    },
    {
      url: absoluteSiteUrl('/privacy'),
      lastModified: new Date(),
      changeFrequency: 'monthly',
      priority: 0.3,
    },
    {
      url: absoluteSiteUrl('/terms'),
      lastModified: new Date(),
      changeFrequency: 'monthly',
      priority: 0.3,
    },
    {
      url: absoluteSiteUrl('/about'),
      lastModified: new Date(),
      changeFrequency: 'monthly',
      priority: 0.5,
    },
    {
      url: absoluteSiteUrl('/editorial-policy'),
      lastModified: new Date(),
      changeFrequency: 'monthly',
      priority: 0.5,
    },
    {
      url: absoluteSiteUrl('/guides'),
      lastModified: new Date(),
      changeFrequency: 'weekly',
      priority: 0.6,
    },
    {
      url: absoluteSiteUrl('/guides/ai-sports-news'),
      lastModified: new Date(),
      changeFrequency: 'monthly',
      priority: 0.55,
    },
    {
      url: absoluteSiteUrl('/guides/nba-game-previews'),
      lastModified: new Date(),
      changeFrequency: 'monthly',
      priority: 0.55,
    },
    {
      url: absoluteSiteUrl('/guides/nhl-matchup-analysis'),
      lastModified: new Date(),
      changeFrequency: 'monthly',
      priority: 0.55,
    },
    ...STATIC_HUBS.map((sport) => ({
      url: absoluteSiteUrl(`/rain-wire/${sport}`),
      lastModified: new Date(),
      changeFrequency: 'daily' as const,
      priority: 0.8,
    })),
  ];

  try {
    const sportsRes = await fetch(`${API_URL}/api/blog/sports`, { next: { revalidate: 3600 } });
    if (sportsRes.ok) {
      const sports = await sportsRes.json();
      for (const sport of sports) {
        if (!sport?.sport) continue;
        entries.push({
          url: absoluteSiteUrl(`/rain-wire/${sport.sport}`),
          lastModified: new Date(),
          changeFrequency: 'daily',
          priority: 0.8,
        });
      }
    }

    const res = await fetch(`${API_URL}/api/blog/sitemap`, { next: { revalidate: 3600 } });
    if (res.ok) {
      const posts = await res.json();
      for (const post of posts) {
        entries.push({
          url: absoluteSiteUrl(`/rain-wire/${post.sport}/${post.slug}`),
          lastModified: new Date(post.updated_at || post.published_at),
          changeFrequency: 'weekly',
          priority: 0.6,
        });
      }
    }
  } catch {
    // Silently fail — sitemap will just have the index
  }

  return Array.from(
    new Map(entries.map((entry) => [entry.url, entry])).values(),
  );
}
