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

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

// ✅ Service Worker Registration
if ("serviceWorker" in navigator) {
  window.addEventListener("load", async () => {
    try {
      const registration = await navigator.serviceWorker.register("/sw.js");

      // ✅ প্রতি ১ ঘণ্টায় একবার update check
      // প্রতি page load-এ না
      const lastCheck = localStorage.getItem('sw-last-check');
      const now = Date.now();
      const ONE_HOUR = 60 * 60 * 1000;

      if (!lastCheck || (now - parseInt(lastCheck)) > ONE_HOUR) {
        await registration.update();
        localStorage.setItem('sw-last-check', String(now));
      }

      // ✅ waiting worker activate করো
      if (registration.waiting) {
        registration.waiting.postMessage("skipWaiting");
      }

      // ✅ নতুন worker install হলে
      registration.addEventListener("updatefound", () => {
        const newWorker = registration.installing;
        if (!newWorker) return;

        newWorker.addEventListener("statechange", () => {
          if (
            newWorker.state === "installed" &&
            navigator.serviceWorker.controller
          ) {
            newWorker.postMessage("skipWaiting");
          }
        });
      });

      // ✅ জোর করে reload না করে
      // user-কে জানাই নতুন version আছে
      let refreshing = false;
      navigator.serviceWorker.addEventListener("controllerchange", () => {
        if (refreshing) return;
        refreshing = true;

        // ✅ user যদি কিছু করছে না থাকে তাহলেই reload
        // না হলে next visit-এ নতুন version পাবে
        if (document.visibilityState === 'hidden') {
          window.location.reload();
        }
      });

    } catch (error) {
      console.error("❌ SW registration failed:", error);
    }
  });
}
