import { createRoot } from "react-dom/client";
import App from "./App.tsx";
import "./index.css";

/**
 * Fallback : si React lève une "Should have a queue" (ou autre erreur
 * d'invalidation HMR / hooks corrompus), on recharge automatiquement
 * la page une fois pour éviter l'écran blanc. Une garde dans
 * sessionStorage empêche les boucles de rechargement.
 */
const RELOAD_KEY = "__react_queue_reload_at";
const RELOAD_COOLDOWN_MS = 10_000;

function shouldAutoReload(message: string): boolean {
  if (!message) return false;
  return (
    message.includes("Should have a queue") ||
    message.includes("Rendered more hooks than during the previous render") ||
    message.includes("Rendered fewer hooks than expected")
  );
}

function tryAutoReload(reason: string) {
  try {
    const last = Number(sessionStorage.getItem(RELOAD_KEY) || "0");
    if (Date.now() - last < RELOAD_COOLDOWN_MS) return; // évite la boucle
    sessionStorage.setItem(RELOAD_KEY, String(Date.now()));
    // eslint-disable-next-line no-console
    console.warn("[auto-reload] React hooks corrompus, rechargement…", reason);
    window.location.reload();
  } catch {
    /* ignore */
  }
}

window.addEventListener("error", (e) => {
  const msg = e?.error?.message || e?.message || "";
  if (shouldAutoReload(msg)) tryAutoReload(msg);
});

window.addEventListener("unhandledrejection", (e) => {
  const reason: any = e?.reason;
  const msg = typeof reason === "string" ? reason : reason?.message || "";
  if (shouldAutoReload(msg)) tryAutoReload(msg);
});

createRoot(document.getElementById("root")!).render(<App />);
