import { expect, type Page, test } from '@playwright/test';
import { createBrowserWorkspace } from './common';

const saveShortcut = process.platform === 'darwin' ? 'Meta+s' : 'Control+s';

async function createTextFile(page: Page, fileName: string, content: string) {
  const explorer = page.getByTestId('interactive-file-explorer');
  await explorer.getByRole('button', { name: 'New File' }).click();
  const dialog = page.getByRole('dialog', { name: 'Create Project File' });
  await dialog.getByLabel('File name').fill(fileName);
  await dialog.getByRole('button', { name: 'Create' }).click();
  const source = page.getByLabel('LaTeX source editor');
  await source.fill(content);
  await source.press(saveShortcut);
  await expect(page.getByText('Saved', { exact: true })).toBeVisible();
}

test('R14.23.0 compiles biblatex/Biber without accepting HTML as a TeX package', async ({ page }) => {
  const workspaceName = `latex-biber-${Date.now()}`;
  await createBrowserWorkspace(page, { workspaceName });

  await createTextFile(
    page,
    'refs.bib',
    '@book{sample2026,title={Browser Biber},author={Researcher, Ada},year={2026},publisher={Learnitive}}',
  );
  await createTextFile(
    page,
    'main.tex',
    [
      '\\documentclass{article}',
      '\\usepackage[backend=biber]{biblatex}',
      '\\addbibresource{refs.bib}',
      '\\begin{document}',
      'Browser citation: \\cite{sample2026}.',
      '\\printbibliography',
      '\\end{document}',
      '',
    ].join('\n'),
  );

  await page.getByRole('button', { name: 'Compile', exact: true }).click();
  const pdfPreview = page.getByTestId('interactive-pdf-preview');
  await expect(pdfPreview.locator('canvas')).toBeVisible({ timeout: 180_000 });

  await pdfPreview.getByTestId('interactive-output-tabs').getByRole('button', { name: 'Log' }).click();
  const log = pdfPreview.getByTestId('interactive-compile-log');
  await expect(log).not.toContainText(/biber-not-supported|switch biblatex to backend=bibtex/i);
  await expect(log).not.toContainText(/<!doctype html|<html/i);
});
