import { defineConfig } from 'vitest/config';
import { fileURLToPath } from 'node:url';

export const hermeticIntegrationSuites = [
  'tests/integration/affiliate-module/backfill.int.test.ts',
  'tests/integration/affiliate-module/fraud-host-store.int.test.ts',
  'tests/integration/affiliate-module/host-retained.int.test.ts',
  'tests/integration/affiliate-module/maturity-host-store.int.test.ts',
  'tests/integration/affiliate-module/negative-guards.int.test.ts',
  'tests/integration/affiliate-module/payout-executor.int.test.ts',
  'tests/integration/affiliate-module/schema/apply.int.test.ts',
  'tests/integration/affiliate-module/sweep-driver.int.test.ts',
  'tests/integration/db/queries/categories-with-translations.int.test.ts',
  'tests/integration/db/queries/tags-with-translations.int.test.ts',
  'tests/integration/realpg/finalize-ownership-query.realpg.test.ts',
  'tests/integration/referrals/fraud/_probe-wave1.int.test.ts',
  'tests/integration/referrals/fraud/adapters-db.int.test.ts',
  'tests/integration/referrals/fraud/decision-points.int.test.ts',
  'tests/integration/referrals/fraud/fraud-admin.int.test.ts',
  'tests/integration/referrals/fraud/maturation-sweep.int.test.ts',
  'tests/integration/referrals/fraud/resolve-autosuspend.int.test.ts',
  'tests/integration/referrals/last-click-earn.int.test.ts',
  'tests/integration/translation/enqueue.int.test.ts',
  'tests/integration/translation/failure-deadletter.int.test.ts',
  'tests/integration/translation/search-tsvector.int.test.ts',
];

export default defineConfig({
  test: {
    globals: true,
    environment: 'jsdom',
    setupFiles: ['./tests/setup.ts'],
    include: hermeticIntegrationSuites,
    maxWorkers: Number(process.env.VITEST_MAX_THREADS) || 2,
    maxConcurrency: Number(process.env.VITEST_MAX_CONCURRENCY) || 4,
    testTimeout: 30_000,
    hookTimeout: 120_000,
  },
  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),
      ),
    },
  },
});
