import fs from 'fs';
import path from 'path';
import {SRC_ROOT, collectSourceFiles} from '../../testUtils/sourceFiles';

/**
 * Bootstrap n'est chargé qu'une seule fois, par `src/styles/globals.css`, juste avant
 * `tammkreiz.css`. Tout import direct depuis une page ou un composant réinjecte la
 * feuille Bootstrap dans un autre chunk : selon l'ordre de chargement, son
 * `a { text-decoration: underline }` repasse devant la règle TammKreiz et les liens
 * redeviennent soulignés. Ce test verrouille l'ordre de la cascade.
 */
const GLOBALS_STYLESHEET = path.join(SRC_ROOT, 'styles', 'globals.css');
const LOCALE_LAYOUT = path.join(SRC_ROOT, 'app', '[locale]', 'layout.tsx');

/** Les fichiers de `src/` qui citent `stylesheet` ailleurs que dans `allowedFiles`. */
function filesImporting(stylesheet: string, allowedFiles: string[]): string[] {
  return collectSourceFiles()
    .filter(file => file !== __filename) // ce test cite forcément les chemins qu'il interdit
    .filter(file => !allowedFiles.includes(file))
    .filter(file => fs.readFileSync(file, 'utf8').includes(stylesheet))
    .map(file => path.relative(SRC_ROOT, file))
    .sort();
}

describe('CSS imports', () => {
  it('shouldLoadBootstrapOnlyThroughGlobalsCss', () => {
    expect(filesImporting('bootstrap/dist/css/bootstrap.min.css', [GLOBALS_STYLESHEET])).toEqual([]);
  });

  // Même famille de problème : `globals.css` est chargé par le layout et embarque
  // `pages.css` via @import. Une page qui les réimporte en produit une seconde copie
  // dans son propre chunk, après les CSS de composants qu'elle est censée précéder.
  it('shouldLoadGlobalsCssOnlyFromTheLocaleLayout', () => {
    expect(filesImporting("styles/globals.css'", [LOCALE_LAYOUT])).toEqual([]);
  });

  it('shouldLoadPagesCssOnlyThroughGlobalsCss', () => {
    expect(filesImporting("pages.css'", [GLOBALS_STYLESHEET])).toEqual([]);
  });
});
