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'] }
		}
	],

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