import type { MetadataRoute } from 'next';
import { query } from '@/lib/db';

export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
  const staticPages: MetadataRoute.Sitemap = [
    {
      url: 'https://sportsclaw.guru',
      lastModified: new Date(),
      changeFrequency: 'weekly',
      priority: 1.0,
    },
    {
      url: 'https://sportsclaw.guru/signup',
      lastModified: new Date(),
      changeFrequency: 'monthly',
      priority: 0.9,
    },
    {
      url: 'https://sportsclaw.guru/login',
      lastModified: new Date(),
      changeFrequency: 'monthly',
      priority: 0.7,
    },
    {
      url: 'https://sportsclaw.guru/terms',
      lastModified: new Date(),
      changeFrequency: 'yearly',
      priority: 0.3,
    },
    {
      url: 'https://sportsclaw.guru/privacy',
      lastModified: new Date(),
      changeFrequency: 'yearly',
      priority: 0.3,
    },
    {
      url: 'https://blog.sportsclaw.guru',
      lastModified: new Date(),
      changeFrequency: 'daily',
      priority: 0.9,
    },
  ];

  // Sport category pages
  const sports = ['nba', 'nfl', 'mlb', 'nhl', 'ncaab', 'ncaaf', 'epl'];
  const sportPages: MetadataRoute.Sitemap = sports.map((sport) => ({
    url: `https://blog.sportsclaw.guru?sport=${sport}`,
    lastModified: new Date(),
    changeFrequency: 'daily' as const,
    priority: 0.7,
  }));

  // Blog posts
  let blogPages: MetadataRoute.Sitemap = [];
  try {
    const result = await query(
      `SELECT slug, updated_at FROM sc_blog_posts WHERE status = 'published' ORDER BY published_at DESC LIMIT 5000`
    );
    blogPages = result.rows.map((row: { slug: string; updated_at: string }) => ({
      url: `https://blog.sportsclaw.guru/${row.slug}`,
      lastModified: new Date(row.updated_at),
      changeFrequency: 'daily' as const,
      priority: 0.8,
    }));
  } catch (e) {
    console.error('[sitemap] Failed to fetch blog posts:', e);
  }

  return [...staticPages, ...sportPages, ...blogPages];
}
