import { createRoot } from "react-dom/client";
import App from "./App.tsx";
import "./index.css";
import "@fontsource/dm-sans/latin-300.css";
import "@fontsource/dm-sans/latin-400.css";
import "@fontsource/dm-sans/latin-500.css";
import "@fontsource/dm-sans/latin-600.css";
import "@fontsource/dm-sans/latin-700.css";
import "@fontsource/dm-sans/latin-800.css";
import "@fontsource/dm-sans/latin-400-italic.css";
import "@fontsource/caveat-brush/latin-400.css";
import "@fontsource/inter-tight/latin-300.css";
import "@fontsource/inter-tight/latin-400.css";
import "@fontsource/inter-tight/latin-500.css";
import "@fontsource/inter-tight/latin-600.css";
import "@fontsource/inter-tight/latin-700.css";
import "@fontsource/inter-tight/latin-800.css";
import { preloadBrandAssets } from "./lib/preload";
import { pruneOfflineCache } from "./lib/offlineCache";
import { getTimeOfDayTheme } from "./lib/weatherTheme";
import { prewarmCommonIcons } from "./lib/weatherIconCache";
import { preloadGoogleMaps } from "./hooks/useGoogleMapsKey";
import { paintViewBackground } from "./lib/viewBackground";

if (typeof document !== "undefined") {
  paintViewBackground(getTimeOfDayTheme().background);
}

preloadBrandAssets();

if (typeof window !== "undefined") {
  const setAppHeight = () => {
    const h = Math.ceil(Math.max(
      window.innerHeight || 0,
      document.documentElement.clientHeight || 0,
      window.visualViewport?.height || 0,
    ));
    document.documentElement.style.setProperty("--app-h", `${h}px`);
  };
  const scheduleAppHeight = () => {
    setAppHeight();
    requestAnimationFrame(setAppHeight);
    window.setTimeout(setAppHeight, 250);
  };
  scheduleAppHeight();
  window.addEventListener("resize", scheduleAppHeight, { passive: true });
  window.addEventListener("orientationchange", scheduleAppHeight, { passive: true });
  window.visualViewport?.addEventListener("resize", scheduleAppHeight, { passive: true });
}

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

if (typeof window !== "undefined" && "serviceWorker" in navigator) {
  const isInIframe = (() => {
    try { return window.self !== window.top; } catch { return true; }
  })();
  const host = window.location.hostname;
  const isPreviewHost =
    host.includes("lovableproject.com") ||
    host.includes("lovable.app") ||
    host === "localhost" ||
    host.startsWith("127.");

  if (isInIframe || isPreviewHost) {
    navigator.serviceWorker.getRegistrations().then((regs) => {
      regs.forEach((r) => {
        const url = r.active?.scriptURL || r.installing?.scriptURL || r.waiting?.scriptURL || "";
        if (url.includes("firebase-messaging-sw")) return; // Push-Worker behalten
        r.unregister();
      });
    }).catch(() => {});
  }
}

if (typeof window !== "undefined") {

  setTimeout(() => { void pruneOfflineCache(); }, 5000);

  if ("requestIdleCallback" in window) {
    (window as unknown as { requestIdleCallback: (cb: () => void) => void }).requestIdleCallback(() => prewarmCommonIcons());
  } else {
    setTimeout(prewarmCommonIcons, 800);
  }

  if ("requestIdleCallback" in window) {
    (window as unknown as { requestIdleCallback: (cb: () => void) => void }).requestIdleCallback(() => preloadGoogleMaps());
  } else {
    setTimeout(preloadGoogleMaps, 1200);
  }
}

if (typeof window !== "undefined" && window.localStorage.getItem("drei-push-token")) {
  // Push aktiv: Favoritenliste beim Start und bei Änderungen synchronisieren.
  setTimeout(() => { void import("./lib/push").then((m) => m.syncPushLocations()); }, 3000);
}
