import { defineConfig } from 'vitest/config'
import { resolve } from 'path'

export default defineConfig({
  test: {
    // 测试环境
    environment: 'node',

    // 测试文件匹配模式
    include: [
      'src/server/api/**/__tests__/**',
      'src/server/modules/**/__tests__/**',
      'src/server/utils/**/__tests__/**',
      'src/server/**/__integration_tests__/**'
    ],

    // 排除模式
    exclude: [
      '**/node_modules/**',
      '**/dist/**',
      '**/build/**',
      '**/coverage/**',
      'tests/e2e/**',  // 排除Playwright E2E测试文件
      'src/client/**',  // 排除客户端代码，由组件测试配置处理
    ],

    // 覆盖率配置
    coverage: {
      provider: 'v8',
      reporter: ['text', 'lcov', 'html'],
      reportsDirectory: './coverage',
      exclude: [
        '**/node_modules/**',
        '**/dist/**',
        '**/build/**',
        '**/coverage/**',
        '**/*.d.ts',
        'src/client/**',  // 排除所有客户端代码
        'tests/e2e/**',   // 排除e2e测试代码
        'scripts/**',     // 排除脚本目录
        'src/test/**',    // 排除测试工具目录
        '**/__tests__/**',
        '**/__mocks__/**',
        '**/index.ts',
        '**/types.ts',
        'vitest.config.ts',
        'vitest.config.components.ts',
        'vite.config.ts',
        'server.js',
        'eslint.config.js',
        'debug-page.js',
        'src/server/__test_utils__/**',
      ],
      thresholds: {
        branches: 70,
        functions: 70,
        lines: 70,
        statements: 70
      }
    },

    // 全局设置
    globals: true,

    // 测试超时
    testTimeout: 10000,

    // 设置文件
    setupFiles: ['./src/test/setup.ts'],

    // 别名配置
    alias: {
      '@': resolve(__dirname, './src'),
      '@/client': resolve(__dirname, './src/client'),
      '@/server': resolve(__dirname, './src/server'),
      '@/share': resolve(__dirname, './src/share'),
      '@/test': resolve(__dirname, './test')
    },

    // api测试关闭并行测试
    fileParallelism: false
  }
})