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

/**
 * Cross-browser + mobile viewport matrix for E2E quality gate.
 *
 * - `chromium` runs ALL numbered specs (01-07) including transactional tests
 *   that mutate on-chain state.
 * - Other projects depend on `chromium` finishing first (chain state must exist)
 *   and only run read-only / UI-rendering specs (03, 06, 07).
 */

// Lightweight spec for cross-browser/viewport validation.
// Only 07-landing-pages runs cross-browser — it uses the default { page }
// fixture and does not create wallet contexts, so it works cleanly in all browsers.
const CROSS_BROWSER_SPECS = "07-landing-pages.spec.ts";

// Chromium-specific launch flags (not valid for Firefox/WebKit).
const CHROMIUM_ARGS = ["--disable-dev-shm-usage", "--no-sandbox"];

export default defineConfig({
  testDir: "./tests/e2e",
  testMatch: process.env.CI ? "[0-9]*.spec.ts" : "**/*.spec.ts",
  fullyParallel: false,
  timeout: 10 * 60 * 1000,
  expect: {
    timeout: 30_000,
  },
  retries: process.env.CI ? 1 : 0,
  workers: process.env.CI ? 1 : undefined,
  use: {
    headless: true,
    actionTimeout: 0,
  },
  projects: [
    /* ── Desktop browsers ─────────────────────────────────── */
    {
      name: "chromium",
      use: {
        ...devices["Desktop Chrome"],
        viewport: { width: 1280, height: 720 },
        screen: { width: 1280, height: 720 },
        launchOptions: { args: CHROMIUM_ARGS },
      },
    },
    {
      name: "firefox",
      use: {
        ...devices["Desktop Firefox"],
        viewport: { width: 1280, height: 720 },
        screen: { width: 1280, height: 720 },
      },
      dependencies: ["chromium"],
      testMatch: CROSS_BROWSER_SPECS,
    },
    {
      name: "webkit",
      use: {
        ...devices["Desktop Safari"],
        viewport: { width: 1280, height: 720 },
        screen: { width: 1280, height: 720 },
      },
      dependencies: ["chromium"],
      testMatch: CROSS_BROWSER_SPECS,
    },

    /* ── Mobile viewports ─────────────────────────────────── */
    {
      name: "iphone",
      use: {
        ...devices["iPhone 14"],
      },
      dependencies: ["chromium"],
      testMatch: CROSS_BROWSER_SPECS,
    },
    {
      name: "android",
      use: {
        ...devices["Pixel 7"],
        launchOptions: { args: CHROMIUM_ARGS },
      },
      dependencies: ["chromium"],
      testMatch: CROSS_BROWSER_SPECS,
    },
  ],
});
