import { fileURLToPath, URL } from "node:url";

import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import vueJsx from "@vitejs/plugin-vue-jsx";
import Components from "unplugin-vue-components/vite";
import { ElementPlusResolver } from "unplugin-vue-components/resolvers";
import AutoImport from "unplugin-auto-import/vite";
import { createSvgIconsPlugin } from "vite-plugin-svg-icons";
import viteCompression from "vite-plugin-compression";
import Pages from "vite-plugin-pages";
import Layouts from "vite-plugin-vue-layouts";
import { VitePWA } from "vite-plugin-pwa";
import vueSetupExtend from "vite-plugin-vue-setup-extend";

import path from "path";

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    viteCompression(),
    vueJsx(),
    AutoImport({ dts: "src/auto-imports.d.ts", imports: ["vue"] }),
    createSvgIconsPlugin({
      // 指定需要缓存的图标文件夹
      iconDirs: [path.resolve(process.cwd(), "src/assets/icons")],
      // 指定symbolId格式
      symbolId: "icon-[dir]-[name]",

      /**
       * 自定义插入位置
       * @default: body-last
       */
      // inject?: 'body-last' | 'body-first'

      /**
       * custom dom id
       * @default: __svg__icons__dom__
       */
      // customDomId: '__svg__icons__dom__',
    }),
    Components({
      /* options */
      resolvers: [ElementPlusResolver()],
    }),
    vueSetupExtend(),
    Pages({
      // extendRoute(route, parent) {
      //   console.log("路由监听", route);
      //   if (route.path === "/user/login") {
      //     // Index is unauthenticated.
      //     // 不进行身份认证的路由
      //     return route;
      //   }
      //   // Augment the route with meta that indicates that the route requires authentication.
      //   // 使用 meta 扩充路由,指示路由需要身份验证
      //   return {
      //     ...route,
      //     meta: { auth: true },
      //   };
      // },
    }),
    Layouts({ defaultLayout: "default/index" }),
    VitePWA({
      includeAssets: ["favicon.svg"],
      manifest: false,
      registerType: "autoUpdate",
      workbox: {
        runtimeCaching: [
          {
            urlPattern: /someInterface/i, // 接口缓存 此处填你想缓存的接口正则匹配
            handler: "CacheFirst",
            options: {
              cacheName: "interface-cache",
            },
          },
          {
            urlPattern: /(.*?)\.(js|css|ts)/, // js /css /ts静态资源缓存
            handler: "CacheFirst",
            options: {
              cacheName: "js-css-cache",
            },
          },
          {
            urlPattern: /(.*?)\.(png|jpe?g|svg|gif|bmp|psd|tiff|tga|eps)/, // 图片缓存
            handler: "CacheFirst",
            options: {
              cacheName: "image-cache",
            },
          },
        ],
      },
    }),
  ],
  resolve: {
    alias: {
      "@": fileURLToPath(new URL("./src", import.meta.url)),
    },
  },
  server: {
    hmr: true,
    open: true,
    port: 6714,
  },
});