/**
 * Integration Test Configuration
 *
 * Run with: pnpm test:integration
 *
 * Integration tests:
 * - Located in: test/integration/*.integration.test.ts
 * - Use a REAL database (TimescaleDB/PostgreSQL) for testing
 * - Database is automatically set up, migrated, and cleaned between tests
 * - Longer timeouts for database operations
 * - Run separately from unit tests to keep CI fast
 *
 * Prerequisites:
 * - Docker running with test database container
 * - TEST_DATABASE_URL environment variable (or uses default)
 */

import { defineConfig } from 'vitest/config';
import { resolve } from 'node:path';

const isCI = process.env.CI === 'true' || process.env.GITHUB_ACTIONS === 'true';

export default defineConfig({
  test: {
    name: 'integration',
    globals: true,
    environment: 'node',
    include: ['test/integration/**/*.integration.test.ts'],
    exclude: ['**/node_modules/**', '**/dist/**'],
    setupFiles: ['./src/test/setup.integration.ts'],
    testTimeout: 30000, // Longer timeout for database operations
    hookTimeout: 30000,
    clearMocks: true,
    restoreMocks: true,
    // Run tests sequentially to avoid database conflicts
    // fileParallelism: false ensures test FILES run one at a time
    // singleFork: true ensures all tests share the same process
    fileParallelism: false,
    pool: 'forks',
    poolOptions: {
      forks: {
        singleFork: true,
      },
    },
    reporters: isCI ? ['default', 'github-actions'] : ['default'],
    // Coverage for integration tests
    coverage: {
      provider: 'v8',
      reporter: ['text', 'json', 'json-summary'],
      reportsDirectory: './coverage/integration',
      include: [
        'src/services/**/*.ts',
        'src/routes/**/*.ts',
        'src/jobs/**/*.ts',
      ],
      exclude: [
        '**/*.test.ts',
        '**/test/**',
        'src/services/mediaServer/**/*.ts',
      ],
    },
  },
  resolve: {
    alias: {
      '@tracearr/shared': resolve(__dirname, '../../packages/shared/src'),
      // Use built files for test-utils to handle .js extension imports properly
      '@tracearr/test-utils': resolve(__dirname, '../../packages/test-utils/dist'),
    },
  },
});
