import { defineConfig } from "vite";
import tsConfigPaths from "vite-tsconfig-paths";
import tailwindcss from "@tailwindcss/vite";
import { tanstackStart } from "@tanstack/react-start/plugin/vite";
import viteReact from "@vitejs/plugin-react";

export default defineConfig(async ({ command }) => {
  const plugins: any[] = [
    tsConfigPaths(),
    tailwindcss(),
    tanstackStart({
      // src/server.ts é nosso wrapper SSR com captura de erro
      server: { entry: "server" },
      importProtection: {
        behavior: "error",
        client: {
          files: ["**/server/**"],
          specifiers: ["server-only"],
        },
      },
    }),
    viteReact(),
  ];

  // Nitro é obrigatório no build para gerar o server bundle (.output/server/index.mjs).
  // Preset cloudflare-module = worker ES module (fetch(request, env, ctx)) usado pelo
  // runtime de preview/produção da Lovable. inlineDynamicImports garante que React e
  // demais deps fiquem inlined no bundle, evitando `import("assets/react")` que o
  // worker não consegue resolver em runtime.
  // O build EC2 (vite.config.ec2.ts) seta EC2_BUILD=1 para pular este bloco e injetar
  // seu próprio nitro({ preset: "node-server" }).
  if (command === "build" && !process.env.EC2_BUILD) {
    const { nitro } = await import("nitro/vite");
    plugins.push(
      nitro({
        preset: "cloudflare-module",
        inlineDynamicImports: true,
        rollupConfig: {
          output: {
            inlineDynamicImports: true,
          },
        },
      }),
    );
  }



  if (command === "serve") {
    try {
      const { componentTagger } = await import("lovable-tagger");
      plugins.push(componentTagger());
    } catch {
      // pacote opcional; ignora se não estiver instalado
    }
  }

  return {
    plugins,
    server: {
      host: "::",
      port: 8080,
      strictPort: true,
    },
    resolve: {
      dedupe: [
        "react",
        "react-dom",
        "@tanstack/react-router",
        "@tanstack/react-start",
      ],
    },
  };
});
