import { defineConfig } from 'vitest/config';
import { fileURLToPath } from 'node:url';
import { laneIncludePatterns } from './scripts/validate-test-lanes.mjs';

export default defineConfig({
  test: {
    globals: true,
    environment: 'jsdom',
    testTimeout: 30000,
    hookTimeout: 120000,
    setupFiles: ['./tests/setup.ts'],
    maxWorkers: Number(process.env.VITEST_MAX_THREADS) || 2,
    maxConcurrency: Number(process.env.VITEST_MAX_CONCURRENCY) || 4,
    include: laneIncludePatterns('default'),
    exclude: [
      'tests/unit/tooling/e2e-pr-journeys.test.mjs',
      'tests/unit/tooling/e2e-main-factory-journeys.test.mjs',
      'tests/unit/tooling/slopgate-gate.test.mjs',
      'tests/unit/tooling/sweep-zero-baseline.test.mjs',
    ],
    coverage: {
      provider: 'v8',
      reporter: ['text', 'html'],
      include: [
        'src/server/domain/refund/machine.ts',
        'src/server/domain/promo/machine.ts',
        'src/server/domain/referral/machine.ts',
        'src/server/domain/support-case/machine.ts',
        'src/server/domain/payments-finalize/machine.ts',
        'src/server/domain/settlement-release/machine.ts',
      ],
      exclude: ['**/node_modules/**', '**/dist/**', '**/tests/**', '**/*.config.*'],
      thresholds: {
        perFile: true,
        'src/server/domain/refund/machine.ts': {
          lines: 100,
          branches: 100,
          functions: 100,
          statements: 100,
        },
        'src/server/domain/promo/machine.ts': {
          lines: 100,
          branches: 100,
          functions: 100,
          statements: 100,
        },
        'src/server/domain/referral/machine.ts': {
          lines: 100,
          branches: 100,
          functions: 100,
          statements: 100,
        },
        'src/server/domain/support-case/machine.ts': {
          lines: 100,
          branches: 100,
          functions: 100,
          statements: 100,
        },
        'src/server/domain/payments-finalize/machine.ts': {
          lines: 100,
          branches: 100,
          functions: 100,
          statements: 100,
        },
        'src/server/domain/settlement-release/machine.ts': {
          lines: 100,
          branches: 100,
          functions: 100,
          statements: 100,
        },
      },
    },
  },
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url)),
      'cloudflare:workers': fileURLToPath(
        new URL('./vitest-mocks/cloudflare-workers.ts', import.meta.url),
      ),
      'astro:middleware': fileURLToPath(
        new URL('./vitest-mocks/astro-middleware.ts', import.meta.url),
      ),
    },
  },
});
