import { Toaster } from "@/components/ui/sonner";
import { VlyToolbar } from "../vly-toolbar-readonly.tsx";
import { InstrumentationProvider } from "@/instrumentation.tsx";
import AuthPage from "@/pages/Auth.tsx";
import { ConvexAuthProvider } from "@convex-dev/auth/react";
import { ConvexReactClient, useQuery } from "convex/react";
import { api } from "@/convex/_generated/api";
import { StrictMode, useEffect } from "react";
import { createRoot } from "react-dom/client";
import { BrowserRouter, Route, Routes, useLocation, Navigate } from "react-router";
import "./index.css";
import Landing from "./pages/Landing.tsx";
import NotFound from "./pages/NotFound.tsx";
import Dashboard from "./pages/Dashboard.tsx";
import CreatePresentation from "./pages/CreatePresentation.tsx";
import EditPresentation from "./pages/EditPresentation.tsx";
import Admin from "./pages/Admin.tsx";
import CreateReport from "./pages/CreateReport.tsx";
import EditReport from "./pages/EditReport.tsx";
import CreateAssignment from "./pages/CreateAssignment.tsx";
import EditAssignment from "./pages/EditAssignment.tsx";
import EditProfile from "./pages/EditProfile.tsx";
import AdvertiseWithUs from "./pages/AdvertiseWithUs.tsx";
import Write from "./pages/Write.tsx";
import WriteOrders from "./pages/WriteOrders.tsx";
import WAdmin from "./pages/WAdmin.tsx";
import CreateCaseStudy from "./pages/CreateCaseStudy.tsx";
import EditCaseStudy from "./pages/EditCaseStudy.tsx";
import "./types/global.d.ts";
import { ThemeProvider } from "@/components/theme-provider";
import { ErrorBoundary } from "@/components/ErrorBoundary";
import { AnnouncementBanner } from "@/components/AnnouncementBanner";
import WorkingPage from "./pages/WorkingPage.tsx";



// Analytics handled via Netlify Analytics (enabled in Netlify dashboard)

const convex = new ConvexReactClient(import.meta.env.VITE_CONVEX_URL as string);

function ScrollToTop() {
  const { pathname } = useLocation();

  useEffect(() => {
    window.scrollTo(0, 0);
  }, [pathname]);

  return null;
}

function RouteSyncer() {
  const location = useLocation();
  useEffect(() => {
    window.parent.postMessage(
      { type: "iframe-route-change", path: location.pathname },
      "*",
    );
  }, [location.pathname]);

  useEffect(() => {
    function handleMessage(event: MessageEvent) {
      if (event.data?.type === "navigate") {
        if (event.data.direction === "back") window.history.back();
        if (event.data.direction === "forward") window.history.forward();
      }
    }
    window.addEventListener("message", handleMessage);
    return () => window.removeEventListener("message", handleMessage);
  }, []);

  return null;
}

function AppRoutes() {
  const cachedMaintenance = localStorage.getItem('maintenanceMode') === 'true';
  const siteSettings = useQuery(api.settings.getSiteSettings);

  const maintenanceMode = siteSettings !== undefined 
    ? (siteSettings?.maintenanceMode ?? false)
    : cachedMaintenance;

  return (
    <BrowserRouter>
      <ScrollToTop />
      <RouteSyncer />
      <AnnouncementBanner />
      {maintenanceMode ? (
        <Routes>
          <Route path="/admin" element={<Admin />} />
          <Route path="/working" element={<WorkingPage />} />
          <Route path="*" element={<Navigate to="/working" replace />} />
        </Routes>
      ) : (
        <Routes>
          <Route path="/" element={<Landing />} />
          <Route path="/auth" element={<AuthPage redirectAfterAuth="/dashboard" />} />
          <Route path="/dashboard" element={<Dashboard />} />
          <Route path="/edit-profile" element={<EditProfile />} />
          <Route path="/create" element={<CreatePresentation />} />
          <Route path="/edit/:id" element={<EditPresentation />} />
          <Route path="/create-report" element={<CreateReport />} />
          <Route path="/edit-report/:id" element={<EditReport />} />
          <Route path="/create-assignment" element={<CreateAssignment />} />
          <Route path="/edit-assignment/:id" element={<EditAssignment />} />
          <Route path="/case-study" element={<CreateCaseStudy />} />
          <Route path="/edit-case-study/:id" element={<EditCaseStudy />} />
          <Route path="/admin" element={<Admin />} />
          <Route path="/advertise" element={<AdvertiseWithUs />} />
          <Route path="/write" element={<Write />} />
          <Route path="/write/orders" element={<WriteOrders />} />
          <Route path="/wadmin" element={<WAdmin />} />
          <Route path="*" element={<NotFound />} />
        </Routes>
      )}
    </BrowserRouter>
  );
}

createRoot(document.getElementById("root")!).render(
  <StrictMode>
    <VlyToolbar />
    <InstrumentationProvider>
      <ErrorBoundary>
        <ConvexAuthProvider client={convex}>
          <ThemeProvider attribute="class" defaultTheme="system" enableSystem>
            <AppRoutes />
            <Toaster position="top-center" />

          </ThemeProvider>
        </ConvexAuthProvider>
      </ErrorBoundary>
    </InstrumentationProvider>
  </StrictMode>,
);
