import { defineConfig } from 'vitest/config';
import react from '@vitejs/plugin-react';
import path from 'node:path';

export default defineConfig({
  plugins: [react()],
  resolve: {
    // Ensure all React imports resolve to the same copy, preventing
    // duplicate-React errors (mismatched ReactSharedInternals / hook dispatcher).
    alias: {
      '@': path.resolve(__dirname, './apps/web/src'),
      react: path.resolve(__dirname, 'node_modules/react'),
      'react-dom': path.resolve(__dirname, 'node_modules/react-dom'),
    },
    dedupe: ['react', 'react-dom'],
  },
  test: {
    // Force react-dom and @testing-library through Vite's module graph so that
    // the resolve.alias for 'react-dom' applies (prevents parent-monorepo
    // react-dom loading a different React instance than our source files).
    deps: {
      inline: ['react-dom', '@testing-library/react'],
    },
    // Enable test globals (describe, it, expect without imports)
    globals: true,
    env: {
      CW_LOG_LEVEL: 'silent',
    },
    // Test file pattern
    include: ['**/*.test.ts', '**/*.test.tsx'],
    exclude: ['**/node_modules/**', '**/dist/**', 'packages/**', 'workdir/**'],
    environmentMatchGlobs: [
      ['apps/web/**', 'happy-dom'],
    ],
    // TypeScript support uses tsconfig.json automatically
    // Coverage reporter (optional, for future use)
    coverage: {
      provider: 'v8',
      reporter: ['text', 'json', 'html'],
      reportsDirectory: './apps/server/coverage',
    },
  },
});
