import type { GetServerSideProps } from "next"
import { supabase } from "../lib/supabase"

const SITE_URL = "https://mesnaldo.com"

const staticPages = [
  "/",
  "/goals",
  "/assists",
  "/who-is-best",
  "/trophies",
  "/head-to-head",
  "/career",
  "/honours",
  "/records",
  "/detailed-stats",
  "/messi",
  "/ronaldo",
  "/blog",
  "/poll",
  "/methodology",
  "/about",
  "/faq",
  "/contact",
  "/privacy",
  "/terms",
]

function escapeXml(value: string) {
  return value
    .replace(/&/g, "&amp;")
    .replace(/</g, "&lt;")
    .replace(/>/g, "&gt;")
    .replace(/"/g, "&quot;")
    .replace(/'/g, "&apos;")
}

export const getServerSideProps: GetServerSideProps = async ({ res }) => {
  try {
    const { data: posts, error } = await supabase
      .from("blog_posts")
      .select("slug, published_at, created_at")
      .eq("is_published", true)
      .order("published_at", { ascending: false })

    if (error) {
      console.error("Sitemap blog fetch error:", error)
    }

    const staticUrls = staticPages
      .map(
        (path) => `
  <url>
    <loc>${escapeXml(`${SITE_URL}${path}`)}</loc>
  </url>`
      )
      .join("")

    const blogUrls = (posts ?? [])
      .filter(
        (post) =>
          typeof post.slug === "string" &&
          post.slug.trim().length > 0
      )
      .map((post) => {
        const lastModified =
          post.published_at || post.created_at

        let lastmod = ""

        if (lastModified) {
          const date = new Date(lastModified)

          if (!Number.isNaN(date.getTime())) {
            lastmod = `<lastmod>${date.toISOString()}</lastmod>`
          }
        }

        return `
  <url>
    <loc>${escapeXml(
      `${SITE_URL}/blog/${post.slug.trim()}`
    )}</loc>
    ${lastmod}
  </url>`
      })
      .join("")

    const sitemap = `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
${staticUrls}
${blogUrls}
</urlset>`

    res.statusCode = 200
    res.setHeader(
      "Content-Type",
      "application/xml; charset=utf-8"
    )
    res.setHeader(
      "Cache-Control",
      "public, s-maxage=3600, stale-while-revalidate=86400"
    )

    res.end(sitemap)

    return {
      props: {},
    }
  } catch (error) {
    console.error("Sitemap generation error:", error)

    const fallbackUrls = staticPages
      .map(
        (path) => `
  <url>
    <loc>${escapeXml(`${SITE_URL}${path}`)}</loc>
  </url>`
      )
      .join("")

    const fallbackSitemap = `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
${fallbackUrls}
</urlset>`

    res.statusCode = 200
    res.setHeader(
      "Content-Type",
      "application/xml; charset=utf-8"
    )

    res.end(fallbackSitemap)

    return {
      props: {},
    }
  }
}

export default function Sitemap() {
  return null
}