import type { UserConfig, ConfigEnv } from 'vite'
import { loadEnv } from 'vite'
import { resolve } from 'path'
import { wrapperEnv } from './build/utils'
import { createVitePlugins } from './build/vite/plugin'
import { OUTPUT_DIR } from './build/constant'
// import { createProxy } from './build/vite/proxy'
import pkg from './package.json'
import { format } from 'date-fns'
const { dependencies, devDependencies, name, version } = pkg

const __APP_INFO__ = {
  pkg: { dependencies, devDependencies, name, version },
  lastBuildTime: format(new Date(), 'yyyy-MM-dd HH:mm:ss')
}

function pathResolve(dir: string) {
  return resolve(process.cwd(), '.', dir)
}

// const proxyUrl = 'https://dev.lexiaoya.cn'
// const proxyUrl = 'http://127.0.0.1:7293/'
const proxyUrl = 'https://test.resource.colexiu.com'
// const proxyUrl = 'https://test.lexiaoya.cn'

export default ({ command, mode }: ConfigEnv): UserConfig => {
  const root = process.cwd()
  const env = loadEnv(mode, root)
  const viteEnv = wrapperEnv(env)
  const { VITE_PUBLIC_PATH, VITE_DROP_CONSOLE, VITE_PORT, VITE_GLOB_PROD_MOCK } = viteEnv
  const prodMock = VITE_GLOB_PROD_MOCK
  const isBuild = command === 'build'

  return {
    base: VITE_PUBLIC_PATH,
    esbuild: {},
    // resolve: {
    //   alias: [
    //     {
    //       find: /\/#\//,
    //       replacement: pathResolve('types') + '/'
    //     },
    //     {
    //       find: '@',
    //       replacement: pathResolve('src') + '/'
    //     }
    //   ],
    //   dedupe: ['vue']
    // },
    resolve: {
      alias: {
        '@': pathResolve('src') + '/',
        '@components': pathResolve('src/components') + '/',
        '@views': pathResolve('src/views') + '/'
      }
    },
    plugins: createVitePlugins(viteEnv, isBuild, prodMock),
    define: {
      __APP_INFO__: JSON.stringify(__APP_INFO__)
    },
    css: {
      preprocessorOptions: {
        less: {
          modifyVars: {},
          javascriptEnabled: true,
          additionalData: `@import "src/styles/var.less";`
        }
      }
    },
    server: {
      host: true,
      port: VITE_PORT,
      proxy: {
        '/cbs-app': {
          target: proxyUrl,
          changeOrigin: true
        }
      }
    },
    optimizeDeps: {
      include: [],
      exclude: ['vue-demi']
    },
    build: {
      target: 'es2015',
      cssTarget: 'chrome80',
      outDir: OUTPUT_DIR,
      chunkSizeWarningLimit: 2000
    }
  }
}