import { defineConfig } from "vite";
import react from "@vitejs/plugin-react-swc";
import tailwindcss from "@tailwindcss/vite";
import tsconfigPaths from "vite-tsconfig-paths";
import basicSsl from "@vitejs/plugin-basic-ssl";
import svgr from 'vite-plugin-svgr';
declare const process: {
  env: {
    KVM_PROXY_URL: string;
    USE_SSL: string;
  };
};

export default defineConfig(({ mode, command }) => {
  const isCloud = mode.indexOf("cloud") !== -1;
  const onDevice = mode === "device";
  const { KVM_PROXY_URL, USE_SSL } = process.env;
  const useSSL = USE_SSL === "true";

  const plugins = [
    tailwindcss(),
    tsconfigPaths(),
    react(),
    svgr({
      svgrOptions: {
        icon: true,
      },
    }),
  ];
  if (useSSL) {
    plugins.push(basicSsl());
  }

  return {
    plugins,
    build: {
      outDir: isCloud ? "dist" : "../static",
      chunkSizeWarningLimit: 4096,
      rollupOptions: {
        onwarn(warning, warn) {
          const msg = typeof warning === "string" ? warning : warning.message;
          if (
            warning &&
            typeof warning === "object" &&
            warning.code === "PLUGIN_WARNING" &&
            // Vite's resolve plugin may log this when a dependency references Node built-ins (e.g. "stream")
            msg.includes('has been externalized for browser compatibility') &&
            msg.includes('Module "stream"')
          ) {
            return;
          }
          warn(warning);
        },
      },
    },
    server: {
      host: "0.0.0.0",
      https: useSSL,
      proxy: KVM_PROXY_URL
        ? {
            "/me": KVM_PROXY_URL,
            "/device": KVM_PROXY_URL,
            "/webrtc": KVM_PROXY_URL,
            "/auth": KVM_PROXY_URL,
            "/storage": KVM_PROXY_URL,
            "/cloud": KVM_PROXY_URL,
            "/developer": KVM_PROXY_URL,
          }
        : undefined,
    },
    base: onDevice && command === "build" ? "/static" : "/",
  };
});
