/*
 * nav.test.js — Garde du mode de consommation borne (helpers PURS de nav.js).
 *
 * nav.js n'enregistre son listener DOMContentLoaded que derriere `typeof document`,
 * donc l'import est sans effet de bord en node pur : on teste needsModeRedirect et
 * modeLabel sans jsdom. Couvre la cause du 422 INVALID_SERVICE_MODE : atteindre une
 * page de commande sans mode memorise (localStorage vide) doit renvoyer a l'accueil,
 * et le badge ne doit jamais afficher un faux "Sur place" quand aucun mode n'est choisi.
 */
import { test } from 'node:test';
import assert from 'node:assert/strict';
import { readFileSync } from 'node:fs';
import { needsModeRedirect, modeLabel } from '../../src/public/borne/assets/js/nav.js';

/* --- modeLabel ----------------------------------------------------------- */

test('modeLabel: libelle humain ; vide si mode absent ou inconnu (ne ment pas)', () => {
    assert.equal(modeLabel('sur-place'), 'Sur place');
    assert.equal(modeLabel('a-emporter'), 'A emporter');
    assert.equal(modeLabel(null), '');
    assert.equal(modeLabel(undefined), '');
    assert.equal(modeLabel('bidon'), '');
});

/* --- needsModeRedirect --------------------------------------------------- */

test('needsModeRedirect: page profonde SANS mode valide -> redirige', () => {
    assert.equal(needsModeRedirect('/payment.html', null), true);
    assert.equal(needsModeRedirect('/products.html', undefined), true);
    assert.equal(needsModeRedirect('/payment.html', 'bidon'), true);
    assert.equal(needsModeRedirect('/categories.html', ''), true);
});

test('needsModeRedirect: mode valide -> pas de redirection', () => {
    assert.equal(needsModeRedirect('/payment.html', 'sur-place'), false);
    assert.equal(needsModeRedirect('/products.html', 'a-emporter'), false);
});

test('needsModeRedirect: ecran d accueil jamais redirige (le mode s y choisit)', () => {
    assert.equal(needsModeRedirect('/', null), false);
    assert.equal(needsModeRedirect('/index.html', null), false);
    assert.equal(needsModeRedirect('/index.html', 'bidon'), false);
});

/* --- Cablage de la chaine de persistance (regression) -------------------- */

test('categories.html charge nav.js (sinon le mode recu en ?mode= n est jamais persiste)', () => {
    // 1re page post-accueil : elle recoit ?mode= depuis index.html et DOIT le persister
    // via syncModeFromURL. Sans nav.js ici, le mode n atteint pas localStorage et la
    // garde renverrait en boucle un utilisateur legitime vers l accueil (regression revue).
    const html = readFileSync(new URL('../../src/public/borne/categories.html', import.meta.url), 'utf8');
    assert.match(html, /assets\/js\/nav\.js/);
});
