import { defineConfig } from 'vite';
import path from 'path';
import vue from '@vitejs/plugin-vue';
import vueJsx from '@vitejs/plugin-vue-jsx';
import eslint from 'vite-plugin-eslint';
import legacy from '@vitejs/plugin-legacy';
// import { visualizer } from 'rollup-plugin-visualizer'; // 打包内容分析
import IBizVitePlugin from './vite-plugins/ibiz-vite-plugin';

/**
 * 判断是否为浏览器原生组件
 *
 * @author chitanda
 * @date 2023-07-05 09:07:39
 * @param {string} tag
 * @return {*}  {boolean}
 */
function isCustomElement(tag: string): boolean {
  return tag.startsWith('ion-');
}

// https://vitejs.dev/config/
export default defineConfig({
  base: './',
  resolve: {
    alias: {
      '@': path.resolve(__dirname, 'src'),
    },
  },
  optimizeDeps: {
    entries: [
      '@ibiz-template-package/vs-tree-ex',
      '@ibiz-template/core',
      '@ibiz-template/mob-theme',
      '@ibiz-template/mob-vue3-components',
      '@ibiz-template/model-helper',
      '@ibiz-template/runtime',
      '@ibiz-template/theme',
      '@ibiz-template/vue3-util',
      '@ibiz/model-core',
      'async-validator',
      'dayjs',
      'echarts',
      'ionicons',
      'lodash-es',
      'pinia',
      'qs',
      'qx-util',
      'ramda',
      'vant',
      'vue',
      'vue-i18n',
      'vue3-hash-calendar',
      'vue-router',
    ],
  },
  build: {
    rollupOptions: {
      external: [
        'vant',
        'vue',
        'vue-router',
        'vue-i18n',
        'async-validator',
        'dayjs',
        'echarts',
        'axios',
        'qs',
        'ramda',
        'lodash-es',
        'qx-util',
        'pinia',
        'mqtt/dist/mqtt.min',
        'cherry-markdown',
        '@ibiz-template-package/vs-tree-ex',
        '@ibiz-template/core',
        '@ibiz-template/runtime',
        '@ibiz-template/vue3-util',
        '@ibiz-template/mob-theme',
        '@ibiz-template/model-helper',
        '@ibiz-template/mob-vue3-components',
      ],
    },
  },
  server: {
    proxy: {
      '/api/darm__mob': {
        target: 'http://172.16.103.146:30103',
        changeOrigin: true,
      },
      '/api/sztrainsys__mob': {
        rewrite(path) {
          return path.replace('/api', '');
        },
        target: 'http://172.16.240.140:20086',
        changeOrigin: true,
      },
      '/api/ls__lsmob/remotemodel': {
        rewrite(path) {
          return path.replace('/api/ls__lsmob/remotemodel', '/ls__lsmob/model');
        },
        target: 'http://localhost:20003',
        changeOrigin: true,
      },
      '/api/ls__lsmob': {
        rewrite(path) {
          return path.replace('/api/ls__lsmob', '/api');
        },
        target: 'http://localhost:8081',
        changeOrigin: true,
      },
      '/api/pms__sclpmsmob': {
        target: 'http://172.16.103.158:30164/',
        changeOrigin: true,
      },
      '/api/demosys__mobvue3/portal/mqtt/mqtt': {
        rewrite(path) {
          return path.replace('/api', '');
        },
        target: 'ws://172.16.103.169:30350',
        changeOrigin: true,
      },
      '/api/demosys__mobvue3': {
        rewrite(path) {
          return path.replace('/api', '/api');
        },
        target: 'http://172.16.103.169:30350',
        changeOrigin: true,
      },
      '/api/cxfhmgmt__cxfhappmob': {
        rewrite(path) {
          return path.replace('/api', '');
        },
        target: 'http://172.16.103.158:30086',
        changeOrigin: true,
      },
      '/api/qdehr__qdehrapp/portal/mqtt/mqtt': {
        rewrite(path) {
          return path.replace('/api', '');
        },
        ws: true,
        target: 'ws://172.16.240.140:46020',
        changeOrigin: true,
      },
      '/api/qdehr__qdehrapp': {
        rewrite(path) {
          return path.replace('/api', '');
        },
        target: 'http://172.16.240.140:46020',
        changeOrigin: true,
      },
      '/api/gsldrcapmgmt__gsldrcapappmob': {
        target: 'http://172.16.103.158:30200',
        changeOrigin: true,
      },
    },
    cors: true,
    fs: {
      strict: false,
    },
  },
  css: {
    preprocessorOptions: {
      scss: {
        additionalData: '@import "@ibiz-template/theme/style/global.scss";',
      },
    },
  },
  plugins: [
    eslint({
      include: 'src/**/*.{ts,tsx,js,jsx}',
    }),
    vue({
      template: {
        compilerOptions: {
          isCustomElement,
        },
      },
    }),
    vueJsx(),
    legacy({ externalSystemJS: true }),
    IBizVitePlugin(),
    // visualizer(),
  ],
});
