// Sélection de la bonne langue depuis un node WP + ses traductions Polylang.
//
// Stratégie robuste : on interroge un node (FR par défaut) en demandant aussi
// ses `translations`. L'ensemble {node} ∪ {translations} couvre TOUJOURS les 3
// langues, quelle que soit la langue de base renvoyée par WPGraphQL. On choisit
// celle qui matche la locale demandée.

import type { Locale } from "@/config/i18nRoutes";
import type { WpLanguage } from "./types";

interface HasLang {
  language?: WpLanguage | null;
  translations?: HasLang[] | null;
}

const langCode = (l?: WpLanguage | null): string =>
  (l?.slug ?? l?.code ?? "fr").toLowerCase();

/**
 * Retourne le node correspondant à `locale` (lui-même ou l'une de ses
 * traductions). Si aucune traduction n'existe pour cette locale :
 *   - locale = fr → on retourne le node de base (contenu FR par défaut)
 *   - locale = en/es → null (page non encore traduite → 404 localisé)
 */
export function pickLang<T extends HasLang>(node: T | null | undefined, locale: Locale): T | null {
  if (!node) return null;
  if (langCode(node.language) === locale) return node;
  const match = (node.translations ?? []).find((t) => langCode(t?.language) === locale);
  if (match) return match as T;
  return locale === "fr" ? node : null;
}
