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

export default defineConfig({
  testDir: "./e2e",
  outputDir: "./e2e/results",
  fullyParallel: true,
  retries: process.env.CI ? 2 : 0,
  workers: process.env.CI ? 1 : undefined,
  reporter: process.env.CI
    ? [["github"], ["html", { open: "never" }], ["json", { outputFile: "playwright-results.json" }]]
    : "list",
  use: {
    baseURL: "http://localhost:3000",
    trace: "on-first-retry",
    screenshot: "only-on-failure",
  },
  projects: [
    {
      name: "journal",
      testMatch: "journal.test.ts",
      use: {
        ...devices["Desktop Chrome"],
        baseURL: "http://localhost:3000",
      },
    },
    {
      name: "planner",
      testMatch: "planner-*.test.ts",
      use: {
        ...devices["Desktop Chrome"],
        baseURL: "http://localhost:3001",
      },
    },
    {
      name: "auth",
      testMatch: "auth.test.ts",
      use: {
        ...devices["Desktop Chrome"],
        baseURL: "http://localhost:3000",
      },
    },
    {
      name: "public-content",
      testMatch: "public-content.test.ts",
      use: {
        ...devices["Desktop Chrome"],
        baseURL: "http://localhost:3000",
      },
    },
    {
      name: "demo-bot",
      testMatch: "demo-bot.test.ts",
      use: {
        ...devices["Desktop Chrome"],
        baseURL: "http://localhost:3000",
      },
    },
    {
      name: "integration",
      testMatch: "integration.test.ts",
      use: {
        ...devices["Desktop Chrome"],
      },
    },
    {
      name: "journal-planner-save",
      testMatch: "journal-planner-save.test.ts",
      use: {
        // No baseURL — the test navigates between both apps using
        // absolute URLs.
        ...devices["Desktop Chrome"],
      },
    },
    {
      name: "notifications",
      testMatch: "notifications.test.ts",
      use: {
        ...devices["Desktop Chrome"],
        baseURL: "http://localhost:3000",
      },
    },
    {
      name: "komoot-import",
      testMatch: "komoot-import.test.ts",
      use: {
        ...devices["Desktop Chrome"],
        baseURL: "http://localhost:3000",
      },
    },
  ],
  webServer: process.env.CI
    ? [
        {
          command: "npx react-router-serve ./build/server/index.js",
          url: "http://localhost:3000",
          cwd: "./apps/journal",
          reuseExistingServer: false,
        },
        {
          command: "node --experimental-strip-types server.ts",
          url: "http://localhost:3001",
          cwd: "./apps/planner",
          reuseExistingServer: false,
        },
      ]
    : [
        {
          command: "pnpm --filter @trails-cool/journal dev",
          url: "http://localhost:3000",
          reuseExistingServer: true,
        },
        {
          command: "pnpm --filter @trails-cool/planner dev",
          url: "http://localhost:3001",
          reuseExistingServer: true,
        },
      ],
});
