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

export default defineConfig(({ mode }) => {
  const env = loadEnv(mode, process.cwd(), "");

  return {
    plugins: [react()],
    server: {
      host: env.HOST,
      port: Number(env.PORT),
      fs: {
        allow: [".."],
      },
      allowedHosts: [
        ...(env.VITE_CLOUDFLARE_HOST ? [env.VITE_CLOUDFLARE_HOST] : []),
        "192.168.0.94",
      ],
      proxy: {
        "/api": {
          target: env.VITE_API_BASE_URL_BACKEND || "http://localhost:5000",
          changeOrigin: true,
          configure: (proxy) => {
            proxy.on("proxyReq", (proxyReq, req) => {
              const auth = (req as any).headers["authorization"];
              if (auth) proxyReq.setHeader("Authorization", auth);
            });
          },
        },
        "/socket.io": {
          target: env.VITE_API_BASE_URL_BACKEND || "http://localhost:5000",
          changeOrigin: true,
          ws: true,
        },
      },
    },
    resolve: {
      extensions: [".mts", ".ts", ".tsx", ".mjs", ".js", ".jsx", ".json"],
      alias: {
        "@": path.resolve(__dirname, "src"),
        "@repo/db/usedSchemas": path.resolve(__dirname, "../../packages/db/usedSchemas/browser.ts"),
        "@repo/db/types": path.resolve(__dirname, "../../packages/db/types/index.ts"),
        "@repo/db": path.resolve(__dirname, "../../packages/db"),
      },
    },
    optimizeDeps: {
      exclude: ["@repo/db"],
    },
  };
});
