/// <reference types='vitest' />
import { mergeConfig } from 'vite'
import { defineConfig, type UserConfig } from 'vitest/config'

import { getBaseConfig } from './vite/base.config'
import { getBaseClientConfig } from './vite/base-client.config'
import { BUILD_CONFIG } from './vite/build.config'
import { getNodeConfig } from './vite/node.config'
import { getWebchatConfig } from './vite/webchat.config'
import { getWebviewsConfig } from './vite/webviews.config'

const isNodeAppBuild = process.env.BUILD_TARGET === 'node'
const targetApp = process.env.TARGET_APP || 'webchat'
const isTestMode =
  process.env.VITEST === 'true' || process.env.NODE_ENV === 'test'

export default defineConfig(({ command }): UserConfig => {
  // Test mode - use base config only to avoid root directory issues
  if (isTestMode) {
    return getBaseConfig() as UserConfig
  }

  // Server/Node build
  if (isNodeAppBuild) {
    return mergeConfig(getBaseConfig(), getNodeConfig()) as UserConfig
  }

  // Client builds - baseClientConfig already includes base config
  const baseClientConfig = getBaseClientConfig()
  const clientConfig =
    targetApp === BUILD_CONFIG.TARGET_APPS.WEBVIEWS
      ? getWebviewsConfig(command)
      : getWebchatConfig(command)

  return mergeConfig(baseClientConfig, clientConfig) as UserConfig
})
