import { defineConfig } from '@playwright/test';
import { loadEnvFiles } from './tests/e2e/helpers/env';

loadEnvFiles(['.dev.vars']);

const PORT = Number(process.env.PORT ?? 4327);
const BASE_URL = process.env.BASE_URL ?? `http://127.0.0.1:${PORT}`;
const factoryMode = process.env.E2E_FACTORY_MODE === '1';
// This is a live-readonly sweep suite, so this config is its explicit opt-in.
process.env.ALLOW_LIVE_E2E ??= '1';
const isExternalUrl = !BASE_URL.includes('localhost') && !BASE_URL.includes('127.0.0.1');
const skipWebServer = process.env.SWEEP_NO_WEBSERVER === '1';

export default defineConfig({
  testDir: './tests/e2e/sweep',
  fullyParallel: true,
  forbidOnly: !!process.env.CI,
  retries: 0,
  workers: 1,
  reporter: [
    ['list'],
    ['json', { outputFile: 'tests/e2e/sweep/sweep-results.json' }],
    ['./tests/e2e/sweep/sweep-run-reporter.ts'],
  ],
  timeout: 45_000,
  expect: { timeout: 5_000 },
  use: {
    baseURL: BASE_URL,
    trace: 'retain-on-failure',
    screenshot: 'only-on-failure',
    timezoneId: 'Asia/Jerusalem',
  },
  projects: [
    { name: 'desktop-1280', use: { viewport: { width: 1280, height: 900 }, isMobile: false } },
    { name: 'mobile-390', use: { viewport: { width: 390, height: 844 }, isMobile: true } },
  ],
  ...(!isExternalUrl &&
    !skipWebServer && {
      webServer: {
        command: factoryMode
          ? 'node scripts/factory-preview-server.mjs'
          : process.env.SWEEP_SKIP_BUILD === '1'
            ? `pnpm preview --host 127.0.0.1 --port ${PORT}`
            : `pnpm build && pnpm preview --host 127.0.0.1 --port ${PORT}`,
        url: factoryMode ? `${BASE_URL}/maintenance` : `${BASE_URL}/robots.txt`,
        reuseExistingServer: factoryMode ? false : !process.env.CI,
        stdout: 'pipe',
        stderr: 'pipe',
        timeout: process.env.CI ? 180_000 : 300_000,
      },
    }),
});
