import { MetadataRoute } from 'next'

// Force dynamic rendering - don't generate at build time
export const dynamic = 'force-dynamic'

/**
 * Dynamische Sitemap-Generierung
 *
 * Diese Funktion wird zur Laufzeit aufgerufen und generiert die Sitemap
 * basierend auf den aktuellen Inhalten der Datenbank.
 */
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
  const baseUrl = process.env.NEXT_PUBLIC_SERVER_URL || 'https://pl.c2sgmbh.de'

  // Basis-Sitemap mit Startseite
  const sitemapEntries: MetadataRoute.Sitemap = [
    {
      url: baseUrl,
      lastModified: new Date(),
      changeFrequency: 'daily',
      priority: 1.0,
    },
  ]

  // Dynamische Inhalte nur zur Laufzeit laden, nicht beim Build
  if (process.env.NODE_ENV === 'production' && typeof window === 'undefined') {
    try {
      // Lazy import um Build-Zeit-Probleme zu vermeiden
      const { getPayload } = await import('payload')
      const config = (await import('@payload-config')).default

      const payload = await getPayload({ config })

      // Alle veröffentlichten Seiten abrufen
      const pages = await payload.find({
        collection: 'pages',
        where: { status: { equals: 'published' } },
        limit: 1000,
        depth: 0,
      })

      for (const page of pages.docs) {
        if (page.slug === 'home' || page.slug === 'startseite' || page.slug === '/') {
          continue
        }
        sitemapEntries.push({
          url: `${baseUrl}/${page.slug}`,
          lastModified: new Date(page.updatedAt),
          changeFrequency: 'weekly',
          priority: 0.8,
        })
      }

      // Alle veröffentlichten Blog-Posts abrufen
      const posts = await payload.find({
        collection: 'posts',
        where: { status: { equals: 'published' } },
        limit: 1000,
        depth: 0,
      })

      for (const post of posts.docs) {
        // eslint-disable-next-line @typescript-eslint/no-explicit-any
        const postType = (post as any).type || 'blog'
        const urlPrefix =
          postType === 'news'
            ? 'news'
            : postType === 'press'
              ? 'presse'
              : postType === 'announcement'
                ? 'aktuelles'
                : 'blog'

        sitemapEntries.push({
          url: `${baseUrl}/${urlPrefix}/${post.slug}`,
          lastModified: new Date(post.updatedAt),
          changeFrequency: 'monthly',
          priority: 0.6,
        })
      }
    } catch (error) {
      console.warn('[Sitemap] Could not fetch dynamic content:', error)
    }
  }

  return sitemapEntries
}
