import { vitePlugin as remix } from "@remix-run/dev";
import { defineConfig } from "vite";
import tsconfigPaths from "vite-tsconfig-paths";

declare module "@remix-run/node" {
  interface Future {
    v3_singleFetch: true;
  }
}

export default defineConfig({
  plugins: [
    remix({
      future: {
        v3_fetcherPersist: true,
        v3_relativeSplatPath: true,
        v3_throwAbortReason: true,
        v3_singleFetch: true,
        v3_lazyRouteDiscovery: true,
      },
    }),
    tsconfigPaths(),
  ],
  server: {
    host: "0.0.0.0",
    port: 5173,
    allowedHosts: [
      "localhost",
      "dev.vitrown.com",
      "prod.vitrown.com",
      "vitrown.com",
      ".vitrown.com"
    ],
  },
  build: {
    target: "esnext",
    // Fast builds for development
    minify: process.env.NODE_ENV === "production" ? "terser" : false,
    sourcemap: process.env.NODE_ENV === "development",
    terserOptions: process.env.NODE_ENV === "production" ? {
      compress: {
        drop_console: true,
        drop_debugger: true,
        passes: 1, // Reduced from 2
      },
      format: {
        comments: false,
      },
    } : undefined,
    rollupOptions: {
      output: {
        // Only chunk in production
        manualChunks: process.env.NODE_ENV === "production" ? (id) => {
          if (id.includes("node_modules")) {
            if (id.includes("lucide-react")) return "vendor-icons";
            // Don't separate radix-ui to avoid React context issues
            return "vendor";
          }
        } : undefined,
      },
    },
    chunkSizeWarningLimit: 2000, // Increased to reduce warnings
  },
  optimizeDeps: {
    include: [
      "react",
      "react-dom",
      "@tanstack/react-query",
      "react-i18next",
      "i18next",
      "moment-jalaali"
    ],
    exclude: ["@remix-run/dev"],
  },
  resolve: {
    dedupe: ["react", "react-dom"],
  },
});