import { fileURLToPath } from 'node:url'
import { defineConfig } from 'vitest/config'

function resolveFromHere(path: string): string {
  return fileURLToPath(new URL(path, import.meta.url))
}

export default defineConfig({
  resolve: {
    alias: [
      {
        find: '@platform-modules/auth/engine-custom',
        replacement: resolveFromHere('../../packages/auth/src/engine-custom/index.ts'),
      },
      {
        find: '@platform-modules/auth/oauth-provider',
        replacement: resolveFromHere('../../packages/auth/src/oauth-provider/index.ts'),
      },
      {
        find: '@platform-modules/auth/api-keys',
        replacement: resolveFromHere('../../packages/auth/src/api-keys/index.ts'),
      },
      {
        find: '@platform-modules/billing/paypal',
        replacement: resolveFromHere('../../packages/billing/src/paypal/index.ts'),
      },
      {
        find: '@platform-modules/db/postgres/postgres-js',
        replacement: resolveFromHere('../../packages/db/src/postgres/postgres-js.ts'),
      },
      {
        find: '@platform-modules/db/pglite',
        replacement: resolveFromHere('../../packages/db/src/postgres/pglite.ts'),
      },
      {
        find: '@platform-modules/invoicing/morning',
        replacement: resolveFromHere('../../packages/invoicing/src/morning/index.ts'),
      },
      {
        find: '@platform-modules/tax/rates-table',
        replacement: resolveFromHere('../../packages/tax/src/rates-table/index.ts'),
      },
      {
        find: '@platform-modules/tax/taxability',
        replacement: resolveFromHere('../../packages/tax/src/taxability.ts'),
      },
      {
        find: '@platform-modules/tenancy/rbac-triad',
        replacement: resolveFromHere('../../packages/tenancy/src/rbac-triad.ts'),
      },
      {
        find: '@platform-modules/util/tokens',
        replacement: resolveFromHere('../../packages/util/src/tokens.ts'),
      },
      {
        find: /^@platform-modules\/util\/(.+)$/,
        replacement: resolveFromHere('../../packages/util/src/$1.ts'),
      },
      {
        find: '@platform-modules/audit',
        replacement: resolveFromHere('../../packages/audit/src/index.ts'),
      },
      {
        find: '@platform-modules/auth',
        replacement: resolveFromHere('../../packages/auth/src/index.ts'),
      },
      {
        find: '@platform-modules/billing',
        replacement: resolveFromHere('../../packages/billing/src/index.ts'),
      },
      {
        find: '@platform-modules/db',
        replacement: resolveFromHere('../../packages/db/src/index.ts'),
      },
      {
        find: '@platform-modules/entitlements',
        replacement: resolveFromHere('../../packages/entitlements/src/index.ts'),
      },
      {
        find: '@platform-modules/invoicing',
        replacement: resolveFromHere('../../packages/invoicing/src/index.ts'),
      },
      {
        find: '@platform-modules/ledger',
        replacement: resolveFromHere('../../packages/ledger/src/index.ts'),
      },
      {
        find: '@platform-modules/tenancy',
        replacement: resolveFromHere('../../packages/tenancy/src/index.ts'),
      },
    ],
  },
  test: {
    include: ['src/**/*.test.ts', 'tests/**/*.test.ts'],
    poolOptions: { forks: { singleFork: true } },
    hookTimeout: 300_000,
    testTimeout: 180_000,
  },
})
