/**
 * Jeton CSRF à utiliser pour tout appel `fetch`/`axios` manuel.
 *
 * ═════════════════════════════════════════════════════════════════════════════
 * POURQUOI LE COOKIE ET NON LA BALISE <meta name="csrf-token">
 * ═════════════════════════════════════════════════════════════════════════════
 * La balise meta est rendue une seule fois par `app.blade.php`, au premier
 * chargement complet de la page. Inertia ne la régénère jamais lors de la
 * navigation SPA. Si la session expire côté serveur pendant que l'onglet
 * reste ouvert (`SESSION_LIFETIME`, agent qui garde la messagerie ouverte
 * toute la journée), Laravel régénère une session + un jeton neufs — mais la
 * balise meta garde l'ancienne valeur pour toujours. Résultat : 419 sur un
 * onglet longue durée, invisible en local où on recharge la page avant de
 * tester.
 *
 * Le cookie `XSRF-TOKEN`, lui, est réémis par Laravel à CHAQUE réponse avec
 * le jeton courant de la session — jamais périmé tant que la session vit.
 * C'est exactement ce qu'axios lit automatiquement (`xsrfCookieName`), et ce
 * que ce helper reproduit pour les appels `fetch` natifs.
 *
 * Ne pas relire `document.querySelector('meta[name="csrf-token"]')` ailleurs
 * dans le code — passer par `getCsrfToken()`. La règle ESLint
 * `no-restricted-syntax` fait respecter ça.
 */
export function getCsrfToken(): string {
    const match = document.cookie.match(/(?:^|; )XSRF-TOKEN=([^;]*)/);

    if (match) {
        return decodeURIComponent(match[1]);
    }

    return document.querySelector('meta[name="csrf-token"]')?.getAttribute('content') ?? '';
}
