// Micara bridge — test de DÉRIVE du thème : src/theme.jsx (bridge) doit rester
// identique à front/src/theme.jsx (design system iOS de l'app).
// Le bridge est l'app téléchargée par les clients → il porte le design system
// en dur (zéro réseau au chargement). Si les tokens divergent, le bridge ne
// ressemble plus à l'app → ce test échoue.
// Lancement : `node test-theme-drift.mjs` DEPUIS bridge/renderer (vite requis).
import assert from 'node:assert/strict';
import { createServer } from 'vite';
import { fileURLToPath } from 'node:url';
import path from 'node:path';

const here = path.dirname(fileURLToPath(import.meta.url));
const frontTheme = path.resolve(here, '../../front/src/theme.jsx');
const bridgeTheme = path.resolve(here, './src/theme.jsx');

let n = 0;
const eq = (name, a, b) => { assert.deepEqual(a, b, name); n++; console.log(`  ok ${n} — ${name}`); };

const server = await createServer({ server: { middlewareMode: true }, appType: 'custom', logLevel: 'error' });
try {
  const front = await server.ssrLoadModule(frontTheme);
  const bridge = await server.ssrLoadModule(bridgeTheme);

  const fKeys = Object.keys(front.DEFAULT_TOKENS).sort();
  const bKeys = Object.keys(bridge.DEFAULT_TOKENS).sort();
  eq('DEFAULT_TOKENS : mêmes clés (front == bridge)', fKeys, bKeys);

  // sentinelles : les tokens structurants du design iOS ne doivent pas dériver
  for (const k of ['--color-accent', '--color-background-body', '--color-background-card',
    '--color-text-primary', '--color-text-secondary', '--color-success', '--color-error',
    '--color-warning', '--radius-inner', '--radius-element', '--radius-page',
    '--size-element-md', '--font-family-body', '--shadow-low', '--shadow-med', '--shadow-high',
    '--color-background-red', '--color-text-blue', '--color-border-green']) {
    eq(`sentinel ${k}`, bridge.DEFAULT_TOKENS[k], front.DEFAULT_TOKENS[k]);
  }
  eq('buildTheme() sain (tokens non vides)', Object.keys(bridge.buildTheme().tokens).length > 0, true);
  console.log(`\ntheme : ${n} vérifs OK (zéro dérive front/bridge)`);
} finally {
  await server.close();
}
