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

// ────────────────────────────────────────────────────────────────────────
// Vitest configuration.
//
// Separate from `vite.config.js` so the production build config stays
// focused on production concerns (PWA manifest, sticker virtual module,
// dev-server proxy) and doesn't ship test-only configuration into
// userland. Vitest reads this file specifically when running tests.
//
// What this enables
// ─────────────────
//   • jsdom environment — gives tests access to `document`, `window`,
//     `localStorage`, etc. Required for any test of useDesignEditor
//     (which reads localStorage for the diagnostic-history flag) and
//     any future component test using React Testing Library.
//
//   • React plugin — JSX compilation. Tests can import .jsx files
//     directly.
//
//   • Setup file — `src/test/setup.js` runs before each test file
//     and registers @testing-library/jest-dom's custom matchers
//     (toBeInTheDocument, toHaveTextContent, etc.) plus a global
//     `afterEach` that cleans up the RTL container so tests don't
//     bleed state into each other.
//
//   • `globals: true` — exposes `describe`/`it`/`expect`/`vi` as
//     globals so tests don't have to import them from 'vitest'
//     in every file. This matches Jest's convention (which the
//     codebase has zero prior tests in but the React community
//     largely defaults to), and keeps the test files visually
//     close to the original source they cover.
//
// What's NOT here (intentionally)
// ─────────────────────────────────
//   • Coverage reporter. We can add `@vitest/coverage-v8` and a
//     `coverage` config block later if/when we want CI-gated
//     coverage thresholds. For v1 the tests are themselves the
//     coverage — adding the reporter now would inflate dev deps
//     and CI time without yet having a coverage target to enforce.
//
//   • Aliases. The codebase uses only relative imports (`'../utils/...'`,
//     `'./SomeComponent'`); there's no `@/` or similar to teach the
//     resolver about. If we ever add path aliases to the main vite
//     config, we'd mirror them here.
//
//   • Custom test-include glob. The default `**/*.{test,spec}.{js,jsx}`
//     matches the co-located convention we're using (test file lives
//     next to the source it covers). Override only if we add a separate
//     `tests/` directory later.
// ────────────────────────────────────────────────────────────────────────

export default defineConfig({
  plugins: [react()],
  test: {
    environment: 'jsdom',
    globals: true,
    setupFiles: ['./src/test/setup.js'],
    // Co-located tests: `Foo.test.js` next to `Foo.js`.
    // The default include glob already covers this; listing it
    // explicitly so the convention is visible in the config file
    // for anyone exploring the repo.
    include: ['src/**/*.{test,spec}.{js,jsx}'],
    // CSS imports in source files (e.g. `import './App.css'`) need to
    // resolve without errors during test runs even though the styles
    // themselves don't affect test logic. `css: false` tells Vitest
    // to short-circuit CSS processing — imports succeed, no parsing
    // happens, tests stay fast. Set to true (or a finer-grained
    // matcher) if/when a test needs to assert on computed styles.
    css: false,
  },
});
