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

import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import vueJsx from "@vitejs/plugin-vue-jsx";
import vuetify from "vite-plugin-vuetify";
import Layouts from "vite-plugin-vue-layouts";
import DefineOptions from "unplugin-vue-define-options/vite";
import Components from "unplugin-vue-components/vite";
import AutoImport from "unplugin-auto-import/vite";
import Pages from "vite-plugin-pages";

import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    vueJsx(),
    vuetify({
      styles: {
        configFile: "src/plugins/vuetify/styles/variables/_vuetify.scss",
      },
    }),
    Pages({
      dirs: ["./src/modules", "./src/pages", ],
      exclude: ['**/*.ts'], // only load .vue as modules
    }),
    Layouts({
      layoutsDirs: "./src/layouts/",
    }),
    Components({
      dirs: ["src/plugins/vuetify/@core/components"],
      dts: true,
    }),
    AutoImport({
      imports: ["vue", "vue-router", "@vueuse/core", "@vueuse/math", "vue-i18n", "pinia"],
      vueTemplate: true,
    }),
    VueI18nPlugin({
      runtimeOnly: true,
      compositionOnly: true,
      include: [
        fileURLToPath(new URL('./src/plugins/i18n/locales/**', import.meta.url)),
      ],
    }),
    DefineOptions(),
  ],
  resolve: {
    alias: {
      "@": fileURLToPath(new URL("./src", import.meta.url)),
      "@themeConfig": fileURLToPath(
        new URL("./themeConfig.ts", import.meta.url)
      ),
      "@configured-variables": fileURLToPath(
        new URL(
          "./src/plugins/vuetify/styles/variables/_template.scss",
          import.meta.url
        )
      ),
      "@core": fileURLToPath(
        new URL("./src/plugins/vuetify/@core", import.meta.url)
      ),
      "@layouts": fileURLToPath(
        new URL("./src/plugins/vuetify/@layouts", import.meta.url)
      ),
      "@images": fileURLToPath(
        new URL("./src/plugins/vuetify/images/", import.meta.url)
      ),
      "@styles": fileURLToPath(
        new URL("./src/plugins/vuetify/styles/", import.meta.url)
      ),
    },
  },
  optimizeDeps: {
    exclude: ["vuetify"],
    entries: ["./src/**/*.vue"],
  },
});
