import type { MetadataRoute } from 'next'
import { blogPosts } from '@/data/blog-posts'
import { MARKETPLACE_CATEGORY_PAGES } from '@/data/marketplace-category-pages'
import { fetchActiveListingSitemapEntries } from '@/lib/marketplace-queries'
import { SITE_URL } from '@/lib/site-config'

export const dynamic = 'force-dynamic'

export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
  const staticPages: MetadataRoute.Sitemap = [
    { url: SITE_URL, changeFrequency: 'daily', priority: 1 },
    { url: `${SITE_URL}/blog`, changeFrequency: 'weekly', priority: 0.7 },
    { url: `${SITE_URL}/wynajem`, changeFrequency: 'monthly', priority: 0.5 },
    { url: `${SITE_URL}/wyposazenie`, changeFrequency: 'monthly', priority: 0.5 },
    { url: `${SITE_URL}/serwis`, changeFrequency: 'monthly', priority: 0.5 },
    { url: `${SITE_URL}/kontakt`, changeFrequency: 'yearly', priority: 0.3 },
    { url: `${SITE_URL}/rejestracja`, changeFrequency: 'monthly', priority: 0.5 },
  ]

  const blogPages: MetadataRoute.Sitemap = blogPosts.map((post) => ({
    url: `${SITE_URL}/blog/${encodeURIComponent(post.slug)}`,
    lastModified: post.dateISO,
    changeFrequency: 'monthly',
    priority: 0.6,
  }))

  const categoryPages: MetadataRoute.Sitemap = MARKETPLACE_CATEGORY_PAGES.map((category) => ({
    url: `${SITE_URL}${category.href}`,
    changeFrequency: 'daily',
    priority: 0.8,
  }))

  const listings = await fetchActiveListingSitemapEntries()
  const listingPages: MetadataRoute.Sitemap = listings.map((listing) => ({
    url: `${SITE_URL}/sklep/${encodeURIComponent(listing.slug)}`,
    ...(listing.lastModified ? { lastModified: listing.lastModified } : {}),
    changeFrequency: 'weekly',
    priority: 0.8,
  }))

  return [...staticPages, ...categoryPages, ...blogPages, ...listingPages]
}
