import path from 'path'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import WindiCss from 'vite-plugin-windicss'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import Icons from 'unplugin-icons/vite'
import IconsResolver from 'unplugin-icons/resolver'
import ConditionalCompile from './plugins/vite-plugin-conditional-compile'
import topLevelAwait from "vite-plugin-top-level-await";

// https://vitejs.dev/config/
export default defineConfig({
  resolve: {
    alias: {
      '@': path.resolve(__dirname, 'src'),
      '~': path.resolve(__dirname, 'src'),
      // '~components': path.resolve(__dirname, 'src/components'),
      // '~pages': path.resolve(__dirname, 'src/pages'),
      // '~utils': path.resolve(__dirname, 'src/utils'),
      // '~assets': path.resolve(__dirname, 'src/assets'),
      // '~styles': path.resolve(__dirname, 'src/styles'),
      // '~lib': path.resolve(__dirname, 'src/lib'),
      // '~plugins': path.resolve(__dirname, 'src/plugins'),
      // '~router': path.resolve(__dirname, 'src/router'),
      // '~store': path.resolve(__dirname, 'src/store'),
      // '~config': path.resolve(__dirname, 'src/config'),
      // '~api': path.resolve(__dirname, 'src/api'),
      // '~constants': path.resolve(__dirname, 'src/constants'),
      // '~locales': path.resolve(__dirname, 'src/locales'),
    },
  },
  // css: {
  //   preprocessorOptions: {
  //     scss: {
  //       additionalData: '@use "~/styles/element/index.scss" as *;',
  //     },
  //   },
  // },
  plugins: [
    topLevelAwait({
      // The export name of top-level await promise for each chunk module
      promiseExportName: "__tla",
      // The function to generate import names of top-level await promise in each chunk module
      promiseImportName: i => `__tla_${i}`
    }),
    ConditionalCompile(),
    vue({
      reactivityTransform: true,
    }),
    WindiCss(),
    AutoImport({
      // dts: 'src/auto-imports.d.ts',
      imports: ['vue', 'vue/macros', 'vue-router'],
      dirs: [
        'src/composables',
        // 'src/store',
        'src/utils',
      ],
      resolvers: [ElementPlusResolver()],
      vueTemplate: true,
      eslintrc: {
        enabled: true,
        // enabled: false, // Default `false`
        // filepath: './.eslintrc-auto-import.json', // Default `./.eslintrc-auto-import.json`
        // globalsPropValue: true, // Default `true`, (true | false | 'readonly' | 'readable' | 'writable' | 'writeable')
      },
    }),
    Components({
      // dts: 'src/components.d.ts',
      dirs: ['src/components/'],
      // allow auto load markdown components under `./src/components/`
      extensions: ['vue', 'md'],
      // allow auto import and register components used in markdown
      include: [/\.vue$/, /\.vue\?vue/, /\.md$/],
      resolvers: [ElementPlusResolver({ importStyle: 'sass' }), IconsResolver()],
    }),
    Icons({
      compiler: 'vue3',
      autoInstall: true,
    }),
  ],
  server: {
    host: true,
  },
  build: {
    rollupOptions: {
      output: {
        manualChunks: {
          axios: ['axios']
        },
      },
    },
  },
})
