import { fileURLToPath } from "node:url";

import { defineConfig, loadEnv } from "vite";
import react from "@vitejs/plugin-react";
import wasm from "vite-plugin-wasm";

export default defineConfig(({ mode }) => {
  const env = loadEnv(mode, process.cwd(), "");
  const apiTarget = env.VITE_API_TARGET || "http://127.0.0.1:8000";

  return {
    plugins: [react(), wasm()],
    resolve: {
      alias: {
        "@mission-core/plugin-sdk": fileURLToPath(
          new URL("./src/core/device-plugins/frontendSdk.ts", import.meta.url),
        ),
        "@xgrids-k1/frontend": fileURLToPath(
          new URL("../../plugins/xgrids-k1/frontend/src", import.meta.url),
        ),
      },
      dedupe: ["react", "react-dom", "@nodedc/ui-react"],
    },
    optimizeDeps: {
      // Rerun resolves its WASM asset relative to the package entrypoint. Vite's
      // dependency pre-bundler flattens that entrypoint and leaves the WASM URL
      // pointing at the SPA fallback, which browsers reject as text/html.
      exclude: ["@rerun-io/web-viewer"],
    },
    build: {
      target: "esnext",
    },
    server: {
      host: "127.0.0.1",
      port: 5173,
      strictPort: true,
      fs: {
        allow: [
          fileURLToPath(new URL(".", import.meta.url)),
          fileURLToPath(new URL("../../plugins/xgrids-k1", import.meta.url)),
          fileURLToPath(new URL("../../../NODEDC_DESIGN_GUIDELINE/packages", import.meta.url)),
        ],
      },
      proxy: {
        "/api": {
          target: apiTarget,
          changeOrigin: false,
          ws: true,
        },
      },
    },
    preview: {
      host: "127.0.0.1",
      port: 4173,
      strictPort: true,
      proxy: {
        "/api": {
          target: apiTarget,
          changeOrigin: false,
          ws: true,
        },
      },
    },
  };
});
