/**
 * Référentiel des métadonnées du site.
 *
 * Toutes les pages publiques y déclarent leur titre, leur description et leur
 * place dans le fil d'Ariane, dans les deux langues. Un seul endroit à tenir à
 * jour, et les balises (canonique, hreflang, Open Graph) se construisent
 * ensuite d'elles-mêmes.
 *
 * Les pages étant des composants client, elles ne peuvent pas exporter
 * `metadata` : chaque route porte un `layout.tsx` minimal qui appelle
 * `metadonnees()`. C'est la seule façon prévue par Next.js.
 */

import type { Metadata } from "next"

/** L'adresse publique du site. À renseigner dans .env avant la mise en ligne :
 *  elle sert de base à toutes les URL canoniques et au sitemap. */
export const SITE_URL = (
  process.env.NEXT_PUBLIC_SITE_URL || "https://www.sar.sn"
).replace(/\/$/, "")

export const LOCALES = ["fr", "en"] as const
export type Locale = (typeof LOCALES)[number]

const NOM_SITE = {
  fr: "Société Africaine de Raffinage",
  en: "Société Africaine de Raffinage",
}

/** Image de partage par défaut, reprise quand une page n'en déclare pas. */
const IMAGE_PARTAGE = "/media/hero/DJI_0592.jpg"

type Fiche = {
  /** Segment d'URL après la locale. Chaîne vide pour l'accueil. */
  chemin: string
  titreFr: string
  titreEn: string
  descriptionFr: string
  descriptionEn: string
  /** Priorité dans le sitemap, de 0 à 1. */
  priorite: number
  /** Fréquence de mise à jour annoncée aux moteurs. */
  frequence: "daily" | "weekly" | "monthly" | "yearly"
  image?: string
  /** Ancres internes de la page, publiées dans le sitemap : ce sont elles qui
   *  donnent au moteur la matière des liens de site. */
  ancres?: { id: string; fr: string; en: string }[]
}

/**
 * Les pages publiques, dans l'ordre d'importance.
 *
 * Les descriptions sont écrites pour l'affichage dans les résultats de
 * recherche : une phrase qui dit ce que la page contient, sous 160 signes,
 * sans slogan.
 */
export const PAGES: Fiche[] = [
  {
    chemin: "",
    titreFr: "SAR, la raffinerie du Sénégal",
    titreEn: "SAR, Senegal’s refinery",
    descriptionFr:
      "Société Africaine de Raffinage : seule raffinerie du Sénégal depuis 1963. Raffinage du brut, produits pétroliers, projets industriels et engagement sociétal.",
    descriptionEn:
      "Société Africaine de Raffinage: Senegal’s only refinery since 1963. Crude oil refining, petroleum products, industrial projects and community commitment.",
    priorite: 1,
    frequence: "weekly",
  },
  {
    chemin: "entreprise",
    titreFr: "Qui sommes-nous",
    titreEn: "About us",
    descriptionFr:
      "Mot du Directeur général, vision et mission, valeurs, gouvernance, organigramme et projets stratégiques de la Société Africaine de Raffinage.",
    descriptionEn:
      "Managing Director’s message, vision and mission, values, governance, organisation chart and strategic projects of Société Africaine de Raffinage.",
    priorite: 0.9,
    frequence: "monthly",
    ancres: [
      { id: "mot-du-directeur", fr: "Mot du Directeur général", en: "Managing Director’s message" },
      { id: "mission", fr: "Vision et mission", en: "Vision and mission" },
      { id: "valeurs", fr: "Nos valeurs", en: "Our values" },
      { id: "gouvernance", fr: "Gouvernance", en: "Governance" },
      { id: "organigramme", fr: "Organigramme", en: "Organisation chart" },
      { id: "projets", fr: "Projets stratégiques", en: "Strategic projects" },
    ],
  },
  {
    chemin: "activites",
    titreFr: "Que faisons-nous",
    titreEn: "What we do",
    descriptionFr:
      "Le procédé de raffinage, les produits finis (butane, essence, kérosène, gasoil, fuel), l’approvisionnement, la prévention des risques et le laboratoire de la SAR.",
    descriptionEn:
      "The refining process, finished products (butane, petrol, kerosene, diesel, fuel oil), supply, risk prevention and SAR’s laboratory.",
    priorite: 0.9,
    frequence: "monthly",
    ancres: [
      { id: "refining", fr: "Le raffinage", en: "Refining" },
      { id: "products", fr: "Nos produits finis", en: "Our finished products" },
      { id: "etat-des-lieux", fr: "État des lieux", en: "Current situation" },
      { id: "training-videos", fr: "Formation", en: "Training" },
      { id: "safety", fr: "Prévention", en: "Prevention" },
      { id: "laboratory", fr: "Le laboratoire", en: "The laboratory" },
    ],
  },
  {
    chemin: "opportunites",
    titreFr: "Opportunités : emploi, appels d’offres, agrément",
    titreEn: "Opportunities: jobs, tenders, approval",
    descriptionFr:
      "Offres d’emploi et de stage de la SAR, dépôt de candidature spontanée, avis d’appel d’offres en cours et demande d’agrément fournisseur.",
    descriptionEn:
      "SAR job and internship offers, speculative applications, open tender notices and supplier approval requests.",
    priorite: 0.9,
    frequence: "daily",
    ancres: [
      { id: "emploi", fr: "Offres d’emploi", en: "Job offers" },
      { id: "candidature", fr: "Déposer une candidature", en: "Apply now" },
      { id: "avis-appel-offres", fr: "Avis d’appel d’offres", en: "Tender notices" },
      { id: "demande-agrement", fr: "Demande d’agrément", en: "Approval request" },
    ],
  },
  {
    chemin: "fondation",
    titreFr: "Fondation SAR",
    titreEn: "SAR Foundation",
    descriptionFr:
      "La Fondation SAR : sa raison d’être, ses axes d’intervention, ses objectifs et ses réalisations auprès des communautés du Sénégal.",
    descriptionEn:
      "The SAR Foundation: its purpose, areas of action, objectives and achievements alongside communities across Senegal.",
    priorite: 0.8,
    frequence: "monthly",
    ancres: [
      { id: "raison-detre", fr: "Notre raison d’être", en: "Our purpose" },
      { id: "axes", fr: "Axes d’intervention", en: "Areas of action" },
      { id: "objectifs", fr: "Objectifs visés", en: "Objectives" },
      { id: "zones", fr: "Périmètre", en: "Scope" },
      { id: "realisations", fr: "Réalisations", en: "Achievements" },
    ],
  },
  {
    chemin: "medias",
    titreFr: "Actualités et médiathèque",
    titreEn: "News and media library",
    descriptionFr:
      "Toute l’actualité de la Société Africaine de Raffinage, ses publications et sa médiathèque : photographies, vidéos et documents.",
    descriptionEn:
      "All the news from Société Africaine de Raffinage, its publications and its media library: photographs, videos and documents.",
    priorite: 0.8,
    frequence: "daily",
    ancres: [
      { id: "actualite", fr: "Actualités", en: "News" },
      { id: "mediatheque", fr: "Médiathèque", en: "Media library" },
    ],
  },
  {
    chemin: "contact",
    titreFr: "Contact",
    titreEn: "Contact",
    descriptionFr:
      "Contacter la SAR : Km 18, Route de Rufisque, Mbao, Dakar. Numéro vert 800 00 34 34, courriel sar@sar.sn et formulaire de contact.",
    descriptionEn:
      "Contact SAR: Km 18, Route de Rufisque, Mbao, Dakar. Toll-free 800 00 34 34, email sar@sar.sn and contact form.",
    priorite: 0.8,
    frequence: "yearly",
  },
  {
    chemin: "faq",
    titreFr: "Questions fréquentes",
    titreEn: "Frequently asked questions",
    descriptionFr:
      "Ce que signifie le sigle SAR, l’histoire de la raffinerie, ses produits, ses clients et son rôle dans l’économie sénégalaise. Plus de deux cents réponses.",
    descriptionEn:
      "What SAR stands for, the refinery’s history, its products, its customers and its role in Senegal’s economy. More than two hundred answers.",
    priorite: 0.7,
    frequence: "monthly",
  },
  {
    chemin: "visite-guidee",
    titreFr: "Visite guidée de la raffinerie",
    titreEn: "Guided tour of the refinery",
    descriptionFr:
      "Parcourir les installations de la raffinerie de Mbao : les unités, leur rôle et l’enchaînement des étapes du raffinage.",
    descriptionEn:
      "Explore the Mbao refinery: its units, what they do and how the refining stages follow one another.",
    priorite: 0.6,
    frequence: "yearly",
  },
  {
    chemin: "organigramme",
    titreFr: "Organigramme",
    titreEn: "Organisation chart",
    descriptionFr:
      "L’organisation de la Société Africaine de Raffinage : direction générale, directions et services.",
    descriptionEn:
      "How Société Africaine de Raffinage is organised: general management, departments and services.",
    priorite: 0.5,
    frequence: "yearly",
  },
  {
    chemin: "plan-du-site",
    titreFr: "Plan du site",
    titreEn: "Site map",
    descriptionFr: "Toutes les pages du site de la Société Africaine de Raffinage, rassemblées.",
    descriptionEn: "Every page of the Société Africaine de Raffinage website, in one place.",
    priorite: 0.4,
    frequence: "monthly",
  },
  {
    chemin: "mentions-legales",
    titreFr: "Mentions légales",
    titreEn: "Legal notice",
    descriptionFr:
      "Éditeur, hébergement, propriété intellectuelle, données personnelles et conditions d’utilisation du site.",
    descriptionEn:
      "Publisher, hosting, intellectual property, personal data and terms of use of the website.",
    priorite: 0.3,
    frequence: "yearly",
  },
]

export const fiche = (chemin: string) => PAGES.find((p) => p.chemin === chemin)

/** L'URL absolue d'une page, dans une langue donnée. */
export const url = (locale: string, chemin: string) =>
  `${SITE_URL}/${locale}${chemin ? `/${chemin}` : ""}/`

/**
 * Construit les métadonnées d'une page : titre, description, canonique,
 * équivalents de langue et carte de partage.
 */
export function metadonnees(chemin: string, locale: string): Metadata {
  const f = fiche(chemin)
  if (!f) return {}

  const fr = locale !== "en"
  const titre = fr ? f.titreFr : f.titreEn
  const description = fr ? f.descriptionFr : f.descriptionEn
  const canonique = url(locale, chemin)
  const image = `${SITE_URL}${f.image || IMAGE_PARTAGE}`

  return {
    title: titre,
    description,
    alternates: {
      canonical: canonique,
      languages: {
        // x-default renvoie vers le français : c'est la langue du pays.
        "x-default": url("fr", chemin),
        fr: url("fr", chemin),
        en: url("en", chemin),
      },
    },
    openGraph: {
      type: "website",
      siteName: NOM_SITE[fr ? "fr" : "en"],
      locale: fr ? "fr_SN" : "en_US",
      url: canonique,
      title: titre,
      description,
      images: [{ url: image, width: 1200, height: 630, alt: titre }],
    },
    twitter: {
      card: "summary_large_image",
      title: titre,
      description,
      images: [image],
    },
  }
}
