import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import tailwindcss from "@tailwindcss/vite";
import { copyFileSync } from "fs";
import { resolve } from "path";

// Sync root CHANGELOG files to public/ so the app always shows the latest version history
function syncChangelogs() {
  const root = import.meta.dirname;
  const files = ["CHANGELOG.md", "CHANGELOG.fr.md"];
  for (const file of files) {
    try {
      copyFileSync(resolve(root, file), resolve(root, "public", file));
    } catch {
      // Ignore if source file doesn't exist
    }
  }
}

// @ts-expect-error process is a nodejs global
const host = process.env.TAURI_DEV_HOST;

// https://vite.dev/config/
export default defineConfig(async () => {
  // Sync changelogs before starting dev server or building
  syncChangelogs();

  return {
    plugins: [react(), tailwindcss()],

    // Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build`
    //
    // 1. prevent Vite from obscuring rust errors
    clearScreen: false,
    // 2. tauri expects a fixed port, fail if that port is not available
    server: {
      port: 1420,
      strictPort: true,
      host: host || false,
      hmr: host
        ? {
            protocol: "ws",
            host,
            port: 1421,
          }
        : undefined,
      watch: {
        // 3. tell Vite to ignore watching `src-tauri`
        ignored: ["**/src-tauri/**"],
      },
    },
  };
});
