/// <reference types="vitest" />

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path'

export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: {
      '@': resolve(__dirname, 'src')
    }
  },
  test: {
    // 测试环境
    environment: 'jsdom',

    // 全局配置
    globals: true,

    // 设置超时时间
    testTimeout: 10000,
    hookTimeout: 10000,

    // 覆盖率配置
    coverage: {
      // 提供器
      provider: 'v8',

      // 覆盖率报告目录
      reportsDirectory: './test_reports/coverage',

      // 覆盖率报告格式
      reporter: [
        'text',
        'json',
        'html',
        'lcov',
        'lcovonly'
      ],

      // 覆盖率阈值
      lines: 70,
      functions: 70,
      branches: 70,
      statements: 70,

      // 包含的文件
      include: [
        'src/**/*.{js,ts,vue}',
        '!src/main.ts',
        '!src/**/*.d.ts'
      ],

      // 排除的文件
      exclude: [
        'node_modules/',
        'tests/',
        '**/*.spec.ts',
        '**/*.test.ts',
        '**/types/',
        '**/router/',
        '**/main.ts'
      ]
    },

    // 测试文件匹配模式
    include: [
      'tests/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}',
      'src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'
    ],

    // 排除的文件
    exclude: [
      'node_modules',
      'dist',
      '.idea',
      '.git',
      '.cache'
    ],

    // 全局setup文件
    setupFiles: ['./tests/setup.ts'],

    // 监听模式配置
    watch: false,

    // 并行执行
    threads: true,
    maxThreads: 4,
    minThreads: 1,

    // 隔穿环境
    isolate: true,

    // 报告器
    reporters: ['verbose', 'json', 'html'],

    // 输出目录
    outputFile: {
      json: './test_reports/vitest-results.json',
      html: './test_reports/vitest-report.html'
    }
  }
})
