import { fileURLToPath, URL } from "node:url";
import { resolve } from "path";
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import vueDevTools from "vite-plugin-vue-devtools";
import mkcert from "vite-plugin-mkcert";
import cssInjectedByJsPlugin from "vite-plugin-css-injected-by-js";
import Components from 'unplugin-vue-components/vite';
import { PrimeVueResolver } from '@primevue/auto-import-resolver';
import { copyFileSync } from "fs";

// https://vite.dev/config/
export default defineConfig({
  server: {
    port: 3001,
    cors: true,
  },
  plugins: [
    vue(),
    vueDevTools(),
    mkcert(),
    cssInjectedByJsPlugin(),
    Components({
      resolvers: [PrimeVueResolver()]
    }),
    {
      name: "copy-em-ssf-guest",
      buildStart() {
        try {
          copyFileSync(
            "node_modules/@elliemae/em-ssf-guest/dist/elli.ssf.guest.js",
            "public/elli.ssf.guest.js",
          );
        } catch (error) {
          console.warn("Could not copy em-ssf-guest file:", error);
        }
      },
    },
  ],
  resolve: {
    alias: {
      "@": fileURLToPath(new URL("./src", import.meta.url)),
    },
  },
  define: {
    "process.env": {},
  },
  build: {
    target: "esnext",
    outDir: "dist/globaltool",
    lib: {
      formats: ["es"],
      entry: resolve(__dirname, "src/lib/GlobalTool/index.ts"),
      name: "globaltool",
      fileName: (format) => `globaltool.js`,
    },
    cssCodeSplit: false,
    rollupOptions: {
      output: {
        format: "es",
        inlineDynamicImports: true,
        manualChunks: undefined,
        entryFileNames: "globaltool.js",
        chunkFileNames: "[name].js",
        assetFileNames: (assetInfo) => {
          if (assetInfo.name === "style.css") {
            return "styles.css";
          }
          return "[name][extname]";
        },
      },
    },
    minify: true,
  },
});
