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

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

export default defineConfig({
    testDir: './e2e',
    timeout: 60_000,
    expect: { timeout: 10_000 },
    retries: 1,
    workers: 1,
    reporter: [['html', { open: 'never' }], ['list']],
    use: {
        baseURL: process.env.E2E_BASE_URL ?? 'https://ramaiah.engage.healix360.net',
        headless: true,
        screenshot: 'on',
        trace: 'on-first-retry',
        actionTimeout: 8_000,
        navigationTimeout: 15_000,
    },
    projects: [
        // Login tests run first — fresh browser, no saved auth
        {
            name: 'login',
            testMatch: /agent-login\.spec\.ts/,
            use: { browserName: 'chromium' },
        },
        // Auth setup — saves CC agent session for reuse
        {
            name: 'agent-setup',
            testMatch: /auth\.setup\.ts/,
        },
        // CC Agent feature tests — reuse saved auth
        {
            name: 'cc-agent',
            dependencies: ['agent-setup'],
            use: {
                storageState: path.join(__dirname, 'e2e/.auth/agent.json'),
                browserName: 'chromium',
            },
            testMatch: /agent-smoke\.spec\.ts/,
        },
        // Supervisor tests — logs in fresh each run
        {
            name: 'supervisor',
            testMatch: /supervisor-smoke\.spec\.ts/,
            use: { browserName: 'chromium' },
        },
        // Global Hospital — auth setup + smoke tests
        {
            name: 'global-setup',
            testMatch: /global-setup\.ts/,
        },
        {
            name: 'global',
            dependencies: ['global-setup'],
            testMatch: /global-smoke\.spec\.ts/,
            use: {
                storageState: path.join(__dirname, 'e2e/.auth/global-agent.json'),
                browserName: 'chromium',
            },
        },
    ],
});
