import { resolve } from "path"
import { defineConfig, externalizeDepsPlugin } from "electron-vite"
import vue from "@vitejs/plugin-vue"
import vueJsx from "@vitejs/plugin-vue-jsx"
import UnoCSS from "unocss/vite"
import AutoImport from "unplugin-auto-import/vite"
import Components from "unplugin-vue-components/vite"
import VueMacros from "unplugin-vue-macros/vite"
import { VueRouterAutoImports } from "unplugin-vue-router"
import VueRouter from "unplugin-vue-router/vite"
import Layouts from "vite-plugin-vue-layouts"

export default defineConfig({
    main: {
        resolve: {
            alias: {
                config: resolve("config"),
                main: resolve("src/main"),
                res: resolve("resources"),
            },
        },
        plugins: [externalizeDepsPlugin()],
    },
    preload: {
        plugins: [externalizeDepsPlugin()],
    },
    renderer: {
        root: resolve(__dirname, "./src/renderer"),
        resolve: {
            alias: {
                config: resolve("config"),
                "@": resolve("src/renderer/src"),
                "@res": resolve("resources"),
            },
        },
        css: {
            preprocessorOptions: {
                scss: {
                    additionalData: `@use "@/assets/style/global" as *;\n`,
                },
            },
        },
        build: {
            rollupOptions: {
                input: {
                    main: resolve(__dirname, "./src/renderer/index.html"),
                    about: resolve(__dirname, "./src/renderer/about.html"),
                },
            },
        },
        plugins: [
            UnoCSS(),
            VueMacros({
                plugins: {
                    vue: vue(),
                    vueJsx: vueJsx(),
                    vueRouter: VueRouter({
                        root: resolve(__dirname, "src/renderer"),
                        // https://github.com/posva/unplugin-vue-router
                        extensions: [".vue", ".setup.tsx"],
                        exclude: ["**/_ui"],
                    }),
                },
            }),
            Layouts({
                layoutsDirs: "src/layouts",
                pagesDirs: "src/pages",
                defaultLayout: "default",
                extensions: ["vue", "setup.tsx"],
                exclude: ["**/_ui"],
            }),
            // https://github.com/antfu/unplugin-auto-import
            AutoImport({
                imports: [
                    "vue",
                    "@vueuse/core",
                    VueRouterAutoImports,
                    {
                        // add any other imports you were relying on
                        "vue-router/auto": ["useLink"],
                    },
                ],
                dts: true,
                dirs: ["src/composables"],
                vueTemplate: true,
            }),
            // https://github.com/antfu/vite-plugin-components
            Components({
                dts: true,
                dirs: ["src/components"],
            }),
        ],
    },
})