import { defineConfig } from '@playwright/test';

export default defineConfig({
  testDir: './tests',
  // tokens.spec.js builds the Go binary on first run via podman + waits
  // for the spawned master to listen — both can take longer than the
  // default 30s on a cold cache. Other specs are file:// driven and
  // unaffected by this bump.
  timeout: 60000,
  retries: 0,
  reporter: [['line'], ['html', { open: 'never' }]],

  use: {
    // Chromium only -- File System Access API requires it,
    // and the ZDDC tools target "any modern Chromium-based browser"
    browserName: 'chromium',
    screenshot: 'only-on-failure',
    trace: 'retain-on-failure',
  },

  projects: [
    {
      name: 'archive',
      testMatch: 'archive.spec.js',
    },
    {
      name: 'archive-cascade',
      testMatch: 'archive-cascade.spec.js',
    },
    {
      name: 'landing',
      testMatch: 'landing.spec.js',
    },
    {
      name: 'transmittal',
      testMatch: 'transmittal.spec.js',
    },
    {
      name: 'transmittal-init',
      testMatch: 'transmittal-init-check.spec.js',
    },
    {
      name: 'transmittal-drag-drop',
      testMatch: 'transmittal-drag-drop.spec.js',
    },
    {
      name: 'classifier',
      testMatch: 'classifier.spec.js',
    },
    {
      name: 'mdedit',
      testMatch: 'mdedit.spec.js',
    },
    {
      name: 'browse',
      testMatch: 'browse.spec.js',
    },
    {
      name: 'zddc-source',
      testMatch: 'zddc-source.spec.js',
    },
    {
      name: 'toast',
      testMatch: 'toast.spec.js',
    },
    {
      name: 'nav',
      testMatch: 'nav.spec.js',
    },
    {
      name: 'logo',
      testMatch: 'logo.spec.js',
    },
    {
      name: 'zddc',
      testMatch: 'zddc.spec.js',
    },
    {
      name: 'form-safety',
      testMatch: 'form-safety.spec.js',
    },
    {
      name: 'tables',
      testMatch: 'tables.spec.js',
    },
    {
      name: 'zddc-filter',
      testMatch: 'zddc-filter.spec.js',
    },
    {
      name: 'build-label',
      testMatch: 'build-label.spec.js',
    },
    {
      name: 'schema',
      testMatch: 'schema.spec.js',
    },
    {
      // Server-backed: starts a real zddc-server master via
      // tests/lib/server.mjs (which builds the binary on first run
      // through the canonical podman/zddc-go:1.24 invocation), drives
      // Chromium against http://127.0.0.1:<port>/.tokens, exercises
      // create/list/revoke + bearer round-trip + cross-user 404 +
      // XSS-guard. The binary build is cached at zddc/dist/zddc-server-
      // test and invalidated by a hash of cmd/+internal/+go.{mod,sum}
      // so a second run only takes the master-startup time (~1s).
      // First run takes ~30s for the build.
      //
      // The lifecycle is per-spec via beforeAll/afterAll — Playwright's
      // top-level webServer hook would fire for every project, including
      // the file://-driven tool tests that don't need the server.
      name: 'tokens',
      testMatch: 'tokens.spec.js',
    },
  ],
});

