import { ConfigEnv, defineConfig } from "vite";
import path from "path";
import { checker } from "vite-plugin-checker";
import svgrPlugin from "vite-plugin-svgr";
import viteTsconfigPaths from "vite-tsconfig-paths";
import { sentryVitePlugin } from "@sentry/vite-plugin";
import { config } from "dotenv";

import { productName, version } from "../package.json";

import { pluginExposeRenderer } from "./vite.base.config";

// Load environment variables
config({ path: ".env.production" });

// https://vitejs.dev/config
export default defineConfig((env) => {
  const forgeEnv = env as ConfigEnv<"renderer">;
  const { root, mode, forgeConfigSelf } = forgeEnv;
  const name = forgeConfigSelf?.name ?? "main_window";

  return {
    root,
    mode,
    build: {
      outDir: `.vite/renderer/${name}`,
      sourcemap: true,
      rollupOptions: {
        output: {
          manualChunks: {
            react: ["react", "react-dom"],
            recoil: ["recoil", "recoil-sync"],
            ui: ["react-icons", "react-hot-toast", "react-tabs", "react-joyride"],
          },
        },
      },
    },
    resolve: {
      preserveSymlinks: true,
      alias: {
        "@": path.resolve(__dirname, "../src"),
      },
    },
    clearScreen: false,
    plugins: [
      pluginExposeRenderer(name),
      svgrPlugin(),
      viteTsconfigPaths(),
      checker({
        typescript: true,
        eslint: {
          lintCommand: 'eslint "./**/*.{ts,tsx}"',
        },
      }),
      // Put the Sentry vite plugin after all other plugins
      mode === "production" && process.env.SENTRY_AUTH_TOKEN && sentryVitePlugin({
        authToken: process.env.SENTRY_AUTH_TOKEN,
        org: "james-julius-darby-development",
        project: "backsplash",

        // Set release name based on app version
        release: {
          name: version,
        },

        // Debug and output settings
        debug: false,
        silent: true,

        // Disable telemetry
        telemetry: false,
      }),
    ].filter(Boolean), // Remove falsy values from plugins array
    define: {
      __DARWIN__: process.platform === "darwin",
      __WIN32__: process.platform === "win32",
      __LINUX__: process.platform === "linux",
      __APP_NAME__: JSON.stringify(productName),
      __APP_VERSION__: JSON.stringify(version),
      __DEV__: process.env.NODE_ENV === "development",
      __SENTRY_DSN__: JSON.stringify(process.env.SENTRY_DSN || ""),
    },
  };
});
