import { describe, expect, it } from 'vitest';
import { projectFilePath } from '@learnitive/project-storage';
import { planBibliographyPasses } from '../bibliography';

const encoder = new TextEncoder();

function file(path: string, content: string) {
  return { path: projectFilePath(path), content: encoder.encode(content) };
}

describe('planBibliographyPasses', () => {
  it('runs BibTeX for a classic bibliography project', () => {
    const plan = planBibliographyPasses([
      file('main.tex', '\\cite{doe}\\bibliography{refs}'),
      file('refs.bib', '@article{doe,title={Test}}'),
    ]);
    expect(plan.bibtex).toBe(true);
    expect(plan.biberRequested).toBe(false);
  });

  it('detects explicit Biber without pretending BibTeX can replace it', () => {
    const plan = planBibliographyPasses([
      file(
        'main.tex',
        '\\usepackage[backend=biber]{biblatex}\\addbibresource{refs.bib}',
      ),
      file('refs.bib', '@article{doe,title={Test}}'),
    ]);
    expect(plan.bibtex).toBe(false);
    expect(plan.biberRequested).toBe(true);
  });

  it('treats BibLaTeX default backend as Biber', () => {
    const plan = planBibliographyPasses([
      file('main.tex', '\\usepackage{biblatex}\\addbibresource{refs.bib}'),
      file('refs.bib', '@article{doe,title={Test}}'),
    ]);
    expect(plan.bibtex).toBe(false);
    expect(plan.biberRequested).toBe(true);
  });

  it('runs BibTeX when BibLaTeX explicitly selects backend=bibtex', () => {
    const plan = planBibliographyPasses([
      file(
        'main.tex',
        '\\usepackage[backend=bibtex]{biblatex}\\addbibresource{refs.bib}',
      ),
      file('refs.bib', '@article{doe,title={Test}}'),
    ]);
    expect(plan.bibtex).toBe(true);
    expect(plan.biberRequested).toBe(false);
  });
});
