/**
 * Playwright E2E 测试配置
 */
import { defineConfig, devices } from "@playwright/test";

const externalBaseURL = process.env.E2E_BASE_URL;

export default defineConfig({
  testDir: "./e2e",
  fullyParallel: true,
  forbidOnly: !!process.env.CI,
  retries: process.env.CI ? 2 : 0,
  workers: process.env.CI ? 1 : undefined,
  reporter: [["html"], ["list"]],
  use: {
    baseURL: externalBaseURL || "http://localhost:3000",
    trace: "retain-on-failure",
    screenshot: "only-on-failure",
    video: process.env.E2E_VIDEO ? "retain-on-failure" : "off",
  },

  projects: process.env.E2E_ALL_BROWSERS
    ? [
        {
          name: "chromium",
          use: {
            ...devices["Desktop Chrome"],
            channel: process.env.E2E_BROWSER_CHANNEL || "msedge",
          },
        },
        {
          name: "firefox",
          use: { ...devices["Desktop Firefox"] },
        },
        {
          name: "webkit",
          use: { ...devices["Desktop Safari"] },
        },
        {
          name: "Mobile Chrome",
          use: { ...devices["Pixel 5"] },
        },
        {
          name: "Mobile Safari",
          use: { ...devices["iPhone 12"] },
        },
      ]
    : [
        {
          name: "chromium",
          use: {
            ...devices["Desktop Chrome"],
            channel: process.env.E2E_BROWSER_CHANNEL || "msedge",
          },
        },
      ],

  webServer: externalBaseURL
    ? undefined
    : {
        command: "npm run dev -- --host 127.0.0.1 --port 3000",
        url: "http://localhost:3000",
        reuseExistingServer: !process.env.CI,
      },
});
