import { notFound } from "next/navigation"

import { env } from "@/env/server"

import { getSitemapDataById } from "@/utils/sitemap"

import type { NextRequest } from "next/server"

export const dynamic = "force-dynamic"

export async function GET(
  _request: NextRequest,
  context: { params: Promise<{ sitemapId: string }> }
) {
  if (env.NEW_SITE_LIVE_STATUS !== "ALL_LANGUAGES_LIVE") {
    return notFound()
  }

  const params = await context.params
  const sitemapId = params.sitemapId

  console.log("[SITEMAP] Fetching sitemap by ID", sitemapId)

  if (!sitemapId) {
    return notFound()
  }

  const sitemapData = await getSitemapDataById(Number(sitemapId))
  if (!sitemapData.length) {
    return notFound()
  }

  const entries = sitemapData.map((entry) => {
    const alternates = Object.entries(entry.alternates).map(
      ([lang, url]) =>
        `<xhtml:link rel="alternate" hreflang="${lang}" href="${url}" />`
    )

    return `
<url>
  <loc>${entry.url}</loc>
  <lastmod>${entry.lastModified}</lastmod>
  <changefreq>${entry.changeFrequency}</changefreq>
  <priority>${entry.priority}</priority>
  ${alternates.join("")}
</url>`
  })

  const sitemapXML = `<?xml version="1.0" encoding="UTF-8"?>\n<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">${entries.join("")}\n</urlset>`

  return new Response(sitemapXML, {
    headers: { "Content-Type": "application/xml" },
  })
}
