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

/**
 * Playwright config for holdout scenarios.
 *
 * Holdout specs are cloned from the separate harb-holdout-scenarios repo
 * into .holdout-scenarios/ by evaluate.sh and reuse the existing tests/setup/
 * infrastructure (wallet-provider, stack, navigate).
 *
 * The evaluator boots the stack first, then runs:
 *   npx playwright test --config scripts/harb-evaluator/holdout.config.ts
 *
 * Required env vars (set by evaluate.sh):
 *   STACK_RPC_URL            – Anvil JSON-RPC endpoint
 *   STACK_WEBAPP_URL         – Vite dev server URL
 *   STACK_GRAPHQL_URL        – Ponder GraphQL endpoint
 *   HOLDOUT_SCENARIOS_DIR    – Path to cloned scenarios
 */

const scenariosDir = process.env.HOLDOUT_SCENARIOS_DIR;
if (!scenariosDir) {
  throw new Error('HOLDOUT_SCENARIOS_DIR env var required — run via evaluate.sh');
}

export default defineConfig({
  testDir: scenariosDir,
  fullyParallel: false,
  // evaluate.sh sets CI=true before invoking playwright, so forbidOnly is always
  // active in the evaluator context. Accidental test.only() in any scenario file
  // causes an immediate failure rather than a silent partial run.
  forbidOnly: !!process.env.CI,
  retries: 0,
  workers: 1,
  reporter: 'list',
  timeout: 5 * 60 * 1000, // 5 min per test — scenarios involve on-chain txns
  expect: {
    timeout: 30_000,
  },
  use: {
    headless: true,
    viewport: { width: 1280, height: 720 },
    screen: { width: 1280, height: 720 },
    actionTimeout: 60_000,
    launchOptions: {
      args: ['--disable-dev-shm-usage', '--no-sandbox'],
    },
  },
  projects: [
    {
      name: 'chromium',
      use: { ...devices['Desktop Chrome'] },
    },
  ],
});
