import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path'
import Components from 'unplugin-vue-components/vite'
import { VantResolver } from 'unplugin-vue-components/resolvers'

const DEFAULT_BUILD_BASE = '/bxztapp/'

const normalizeBasePath = (value) => {
  if (!value || value === '/') {
    return '/'
  }
  let base = value.trim()
  if (!base.startsWith('/')) {
    base = `/${base}`
  }
  if (!base.endsWith('/')) {
    base = `${base}/`
  }
  return base
}

const resolveCliBase = () => {
  const argv = process.argv || []
  const directFlagIndex = argv.indexOf('--base')
  if (directFlagIndex !== -1 && argv[directFlagIndex + 1]) {
    return argv[directFlagIndex + 1]
  }
  const customFlagIndex = argv.indexOf('--basePath')
  if (customFlagIndex !== -1 && argv[customFlagIndex + 1]) {
    return argv[customFlagIndex + 1]
  }
  const equalArg = argv.find(arg => arg.startsWith('--base='))
  if (equalArg) {
    return equalArg.split('=')[1]
  }
  const equalCustomArg = argv.find(arg => arg.startsWith('--basePath='))
  if (equalCustomArg) {
    return equalCustomArg.split('=')[1]
  }
  return undefined
}

export default defineConfig(({ command, mode }) => {
  const env = loadEnv(mode, process.cwd(), '')
  const baseCandidate =
    command === 'build'
      ? resolveCliBase() ??
        env.VITE_BASE_PATH ??
        env.BASE_PATH ??
        process.env.BASE_PATH ??
        DEFAULT_BUILD_BASE
      : '/'

  return {
    base: process.env.NODE_ENV === 'production' ? normalizeBasePath(baseCandidate) : '/',
    plugins: [
      vue(),
      Components({
        resolvers: [VantResolver()]
      })
    ],
    resolve: {
      alias: {
        '@': resolve(__dirname, 'src'),
        '@shared': resolve(__dirname, '../shared')
      }
    },
    server: {
      port: 8080,
      host: '0.0.0.0',
      open: true,
      proxy: {
        '/snow-ops-platform': {
          target: 'http://8.137.54.85:8661/',
          changeOrigin: true,
        },
        '/v3':{
          target: 'https://restapi.amap.com/',
          changeOrigin: true,
          rewrite: (path) => path.replace(/^\/v3/, '/v3') // 显式声明路径
        }
      },
    },
    build: {
      outDir: 'dist',
      assetsDir: 'assets',
      sourcemap: false
    }
  }
})
