import type { MetadataRoute } from "next"
import { PAGES, LOCALES, url } from "@/lib/seo"

/**
 * Le sitemap, dans les deux langues.
 *
 * Chaque entrée déclare ses équivalents de langue (`alternates.languages`), ce
 * qui évite au moteur de traiter les versions française et anglaise comme deux
 * pages concurrentes.
 *
 * Les ancres des pages à onglets y figurent aussi. Elles ne sont pas des URL
 * distinctes au sens strict, mais elles nomment des sections réelles et
 * fournissent au moteur la matière de ses liens de site : c'est précisément ce
 * qui manquait à l'ancien site, dont les liens de site pointaient vers des
 * pages qui n'existent plus.
 */
export default function sitemap(): MetadataRoute.Sitemap {
  const maintenant = new Date()
  const entrees: MetadataRoute.Sitemap = []

  const langues = (chemin: string) =>
    Object.fromEntries(LOCALES.map((l) => [l, url(l, chemin)]))

  for (const page of PAGES) {
    for (const locale of LOCALES) {
      entrees.push({
        url: url(locale, page.chemin),
        lastModified: maintenant,
        changeFrequency: page.frequence,
        priority: page.priorite,
        alternates: { languages: langues(page.chemin) },
      })

      for (const ancre of page.ancres ?? []) {
        entrees.push({
          url: `${url(locale, page.chemin)}#${ancre.id}`,
          lastModified: maintenant,
          changeFrequency: page.frequence,
          // Une section vaut moins que la page qui la porte.
          priority: Math.max(0.3, page.priorite - 0.2),
        })
      }
    }
  }

  return entrees
}
