import { defineConfig, devices } from '@playwright/test';
import path from 'path';
import { fileURLToPath } from 'url';

const __dirname = path.dirname(fileURLToPath(import.meta.url));

export default defineConfig({
	testDir: './tests/e2e',
	globalSetup: './tests/fixtures/global-setup.ts',
	fullyParallel: false, // sequential: sessions depend on shared Docker DB state
	forbidOnly: !!process.env.CI,
	retries: process.env.CI ? 1 : 0,
	workers: 1,
	reporter: [['html', { open: 'never' }], ['list']],

	use: {
		// Playwright always talks to Vite over the loopback. The LAN IP
		// variant in `.env` (PUBLIC_APP_URL) is for on-device phone previews
		// and introduces extra routing latency that produces intermittent
		// races in the OAuth → optimistic-write path; e2e needs to stay
		// deterministic regardless of what the dev env has in PUBLIC_APP_URL.
		baseURL: 'http://localhost:5173',
		trace: 'on-first-retry',
		screenshot: 'only-on-failure',
		// Load anon storage state by default; individual tests override as needed
	},

	projects: [
		{
			name: 'chromium',
			use: { ...devices['Desktop Chrome'] },
			// Skip WebKit-only specs (touch-gesture tests) — Chromium's
			// touch emulation does not fire the touch* sequence the
			// swipe handlers expect.
			testIgnore: /.*\.webkit\.test\.ts/
		},
		// Fase 9.4: WebKit (Mobile Safari) project for touch-gesture
		// tests. The previous swipe-to-delete tests were left .skip in
		// mobile.test.ts because Chromium's touch emulation broke the
		// gesture; that file was removed in Fase 5.10 when swipe was
		// repurposed as a check-toggle. The replacement webkit specs
		// live in `*.webkit.test.ts` and only run here.
		//
		// The WebKit binary needs system libs (libicu74, libwoff1,
		// libmanette-0.2-0, libxml2 — install via
		// `sudo pnpm exec playwright install-deps`). Hosts that don't
		// have them can run the rest of the suite by leaving the env
		// var unset; gated to keep `just test-all` green elsewhere.
		...(process.env.RUN_WEBKIT === '1'
			? [
					{
						name: 'webkit',
						use: { ...devices['iPhone 13'] },
						testMatch: /.*\.webkit\.test\.ts/
					}
				]
			: [])
	],

	webServer: {
		command: 'pnpm dev',
		url: 'http://localhost:5173',
		reuseExistingServer: true,
		timeout: 120_000
	}
});
