import { defineConfig, devices } from '@playwright/test'

/**
 * playwright.config.ts — Configuração dos testes End-to-End
 *
 * Uso:
 *   pnpm e2e              → roda todos os testes e2e (headless)
 *   pnpm e2e:ui           → abre o Playwright UI para debug interativo
 *   pnpm e2e:headed       → roda com browser visível (útil em desenvolvimento)
 *
 * Em CI/CD (GitHub Actions, etc.):
 *   pnpm e2e              → headless automático
 *
 * Pré-requisito: backend e frontend devem estar rodando.
 *   make dev-backend &
 *   make dev-frontend &
 *   pnpm e2e
 *
 * Ou use o target make test-e2e que sobe tudo automaticamente.
 */
export default defineConfig({
    testDir: './e2e',
    testMatch: '**/*.spec.ts',

    // Timeout por teste (30s é razoável para fluxos de UI)
    timeout: 30_000,

    // Retries em CI para lidar com flakiness de rede
    retries: process.env.CI ? 2 : 0,

    // Workers paralelos — reduzir para 1 em CI se houver race conditions
    workers: process.env.CI ? 1 : undefined,

    // Reporter: no CI usa GitHub Actions reporter; localmente usa HTML interativo
    reporter: process.env.CI
        ? [['github'], ['html', { open: 'never' }]]
        : [['html', { open: 'on-failure' }], ['list']],

    use: {
        // URL base do frontend em desenvolvimento
        baseURL: process.env.E2E_BASE_URL || 'http://localhost:5173',

        // Capturar screenshot apenas em falhas
        screenshot: 'only-on-failure',

        // Capturar vídeo apenas em falhas (útil para debug)
        video: 'retain-on-failure',

        // Trace em CI para análise post-mortem
        trace: process.env.CI ? 'on-first-retry' : 'off',

        // Viewport padrão — desktop
        viewport: { width: 1280, height: 720 },
    },

    projects: [
        {
            name: 'chromium',
            use: { ...devices['Desktop Chrome'] },
        },
        {
            name: 'firefox',
            use: { ...devices['Desktop Firefox'] },
        },
        // Mobile (opcional — descomente para testar responsividade)
        // {
        //   name: 'mobile-chrome',
        //   use: { ...devices['Pixel 5'] },
        // },
    ],

    // Sobe o servidor de desenvolvimento automaticamente antes dos testes.
    // Remova ou ajuste se preferir subir manualmente.
    webServer: {
        command: 'pnpm dev',
        url: 'http://localhost:5173',
        reuseExistingServer: !process.env.CI,
        timeout: 60_000,
    },
})
