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

export default defineConfig({
  testDir: "./tests/e2e",
  timeout: 30_000,
  retries: process.env.CI ? 2 : 0,
  workers: 1,
  reporter: [
    ["list"],
    ["html", { open: "never", outputFolder: "playwright-report" }],
  ],
  use: {
    baseURL: "http://127.0.0.1:4173",
    screenshot: "only-on-failure",
    trace: "on-first-retry",
    video: "retain-on-failure",
  },
  projects: [
    {
      name: "smoke",
      testMatch: [
        "**/smoke.spec.ts",
        "**/sidebar-offcanvas-rail.spec.ts",
        "**/search-scope-screenshots.spec.ts",
        "**/onboarding-docked-cta-screenshots.spec.ts",
        "**/identity-key-help.spec.ts",
        "**/key-import-reveal.spec.ts",
        "**/navigation.spec.ts",
        "**/channels.spec.ts",
        "**/channel-shared-header-backdrop.spec.ts",
        "**/channel-composer-overflow.spec.ts",
        "**/badge.spec.ts",
        "**/channel-browser.spec.ts",
        "**/channel-add-screenshots.spec.ts",
        "**/add-community-screenshots.spec.ts",
        "**/hosted-communities-settings-screenshots.spec.ts",
        "**/invites-settings-screenshots.spec.ts",
        "**/messaging.spec.ts",
        "**/message-feedback-snapshots.spec.ts",
        "**/custom-emoji.spec.ts",
        "**/profile-custom-emoji-status.spec.ts",
        "**/custom-emoji-ui.spec.ts",
        "**/channel-mute.spec.ts",
        "**/channel-star.spec.ts",
        "**/channel-controls.spec.ts",
        "**/channel-activity-popover.spec.ts",
        "**/active-turn-resilience.spec.ts",
        "**/profile-active-turn.spec.ts",
        "**/config-bridge-screenshots.spec.ts",
        "**/observer-feed-screenshots.spec.ts",
        "**/core-memory-screenshots.spec.ts",
        "**/activity-scope-label-screenshots.spec.ts",
        "**/welcome-agent-modal-screenshots.spec.ts",
        "**/local-archive-screenshots.spec.ts",
        "**/voice-settings.spec.ts",
        "**/agent-readiness-screenshots.spec.ts",
        "**/agent-error-state-screenshots.spec.ts",
        "**/edit-agent.spec.ts",
        "**/doctor-cta-screenshots.spec.ts",
        "**/pubkey-display-screenshots.spec.ts",
        "**/file-attachment.spec.ts",
        "**/image-attachment-gallery.spec.ts",
        "**/composer-image-draw.spec.ts",
        "**/video-attachment.spec.ts",
        "**/spoiler.spec.ts",
        "**/composer-link-shortcut.spec.ts",
        "**/entity-link-recipient-cards.spec.ts",
        "**/composer-selection-formatting.spec.ts",
        "**/composer-tooltip-dismiss.spec.ts",
        "**/mentions.spec.ts",
        "**/team-mentions.spec.ts",
        "**/persistent-agent-audience.spec.ts",
        "**/relay-reconnect.spec.ts",
        "**/relay-reconnect-affordance.spec.ts",
        "**/workflows.spec.ts",
        "**/identity-archive.spec.ts",
        "**/identity-archive-hide.spec.ts",
        "**/relay-connectivity.spec.ts",
        "**/unread-pill.spec.ts",
        "**/sidebar-more-unread-overlap.spec.ts",
        "**/sidebar-snapshot.spec.ts",
        "**/home-collapsed-top-chrome.spec.ts",
        "**/top-chrome-zoom-clearance.spec.ts",
        "**/thread-unread.spec.ts",
        "**/workspace-rail.spec.ts",
        "**/community-rail.spec.ts",
        "**/boot-splash.spec.ts",
        "**/thread-reply-anchor-roleplay.spec.ts",
        "**/threadpane-ultrawide.spec.ts",
        "**/thread-focus-mode.spec.ts",
        "**/animated-avatar.spec.ts",
        "**/reminders.spec.ts",
        "**/reminder-click-repro.spec.ts",
        "**/virtualization.spec.ts",
        "**/scroll-history.spec.ts",
        "**/channel-dense-second-reach.spec.ts",
        "**/channel-window-mock-paging.spec.ts",
        "**/live-broadcast-reply-timeline.spec.ts",
        "**/markdown-parse-cache.spec.ts",
        "**/overscroll-boundary.spec.ts",
        "**/terminal-wheel.spec.ts",
        "**/cold-switch-longtask.perf.ts",
        "**/timeline-no-shift.spec.ts",
        "**/human-edit-agent-content.spec.ts",
        "**/empty-edit-delete.spec.ts",
        "**/reaction-order.spec.ts",
        "**/reaction-names.spec.ts",
        "**/inbox-reactions.spec.ts",
        "**/inbox-edit.spec.ts",
        "**/send-channel-binding.spec.ts",
        "**/project-commit-detail.spec.ts",
        "**/project-inbox.spec.ts",
        "**/projects-v3-screenshots.spec.ts",
        "**/project-issue-comments.spec.ts",
        "**/project-pr-review.spec.ts",
        "**/persona-model-combobox-screenshots.spec.ts",
        "**/drafts-screenshots.spec.ts",
        "**/drafts-all-fix-screenshots.spec.ts",
        "**/inbox-refactor-screenshots.spec.ts",
        "**/buzz-theme-screenshots.spec.ts",
        "**/channel-sort.spec.ts",
        "**/identity-lost.spec.ts",
        "**/deep-link-invite.spec.ts",
        "**/invite-link-copy.spec.ts",
        "**/global-agent-config-screenshots.spec.ts",
        "**/doctor-states.spec.ts",
        "**/onboarding-avatar-skip.spec.ts",
        "**/onboarding-backup.spec.ts",
        "**/onboarding-agent-defaults.spec.ts",
        "**/nostr-bind.spec.ts",
        "**/mobile-pairing-qr.spec.ts",
        "**/profile-nsec-reveal.spec.ts",
        "**/profile-backup-settings.spec.ts",
        "**/signout-confirmation.spec.ts",
        "**/settings-section-layout.spec.ts",
        "**/agent-provider-dropdowns.spec.ts",
        "**/agent-lifecycle-feedback.spec.ts",
        "**/agent-access-warning.spec.ts",
        "**/edit-agent-run-on.spec.ts",
        "**/inbox-live-update.spec.ts",
        "**/mesh-compute.spec.ts",
        "**/observer-archive-policy.spec.ts",
        "**/harness-management.spec.ts",
        "**/harness-catalog-screenshots.spec.ts",
        "**/inline-custom-harness.spec.ts",
        "**/where-to-run-config.spec.ts",
        "**/huddle-transcription.spec.ts",
        "**/agent-numeric-tuning.spec.ts",
        "**/needs-restart-screenshots.spec.ts",
      ],
      use: {
        ...devices["Desktop Chrome"],
      },
    },
    {
      name: "integration",
      testMatch: [
        "**/agents.spec.ts",
        "**/agent-snapshot-recipient.spec.ts",
        "**/onboarding.spec.ts",
        "**/stream.spec.ts",
        "**/integration.spec.ts",
        "**/dm-double-notification.spec.ts",
        "**/profile.spec.ts",
        "**/sidebar.spec.ts",
        "**/sidebar-relay-card.spec.ts",
        "**/tokens.spec.ts",
        "**/persona-env-vars.spec.ts",
        "**/persona-sync.spec.ts",
        "**/team-snapshot.spec.ts",
        "**/agents-everywhere.live.spec.ts",
        "**/relay-restart.live.spec.ts",
        "**/parity-ancestor-island.spec.ts",
      ],
      use: {
        ...devices["Desktop Chrome"],
      },
      expect: {
        timeout: process.env.CI ? 15_000 : 10_000,
      },
    },
  ],
  webServer: {
    command: "python3 -m http.server 4173 -d dist",
    cwd: ".",
    reuseExistingServer: !process.env.CI,
    url: "http://127.0.0.1:4173",
  },
});
