import { svelte } from "@sveltejs/vite-plugin-svelte"
import replace from "@rollup/plugin-replace"
import { defineConfig, loadEnv } from "vite"

import path from "path"

export default defineConfig(({ mode }) => {
  const isProduction = mode === "production"
  const env = loadEnv(mode, process.cwd())
  return {
    server: {
      fs: {
        strict: false,
      },
      hmr: {
        protocol: env.VITE_HMR_PROTOCOL || "ws",
        clientPort: env.VITE_HMR_CLIENT_PORT || 3000,
        path: env.VITE_HMR_PATH || "/",
      },
      port: 3000,
    },
    base: "/builder/",
    build: {
      minify: isProduction,
      outDir: "../server/builder",
      sourcemap: !isProduction,
    },
    plugins: [
      svelte({
        hot: !isProduction,
        emitCss: true,
      }),
      replace({
        preventAssignment: true,
        "process.env.NODE_ENV": JSON.stringify(
          isProduction ? "production" : "development"
        ),
        "process.env.POSTHOG_TOKEN": JSON.stringify(process.env.POSTHOG_TOKEN),
        "process.env.INTERCOM_TOKEN": JSON.stringify(
          process.env.INTERCOM_TOKEN
        ),
        "process.env.SENTRY_DSN": JSON.stringify(process.env.SENTRY_DSN),
      }),
    ],
    optimizeDeps: {
      exclude: ["@roxi/routify"],
    },
    resolve: {
      dedupe: ["@roxi/routify"],
      alias: [
        {
          find: "assets",
          replacement: path.resolve("./assets"),
        },
        {
          find: "components",
          replacement: path.resolve("./src/components"),
        },
        {
          find: "builderStore",
          replacement: path.resolve("./src/builderStore"),
        },
        {
          find: "stores",
          replacement: path.resolve("./src/stores"),
        },
        {
          find: "api",
          replacement: path.resolve("./src/api.js"),
        },
        {
          find: "constants",
          replacement: path.resolve("./src/constants"),
        },
        {
          find: "analytics",
          replacement: path.resolve("./src/analytics"),
        },
        {
          find: "actions",
          replacement: path.resolve("./src/actions"),
        },
        {
          find: "helpers",
          replacement: path.resolve("./src/helpers"),
        },
      ],
    },
  }
})
