import React from "react";
import ReactDOM from "react-dom/client";
import "./index.css";
import { BrowserRouter, Routes, Route, Navigate, useLocation } from "react-router-dom";
import { HelmetProvider } from "react-helmet-async";
import { AppProvider } from "./lib/app-context";
import Layout from "./components/Layout";
import { ToastProvider } from "./components/Toast";
import Home from "./pages/Home";
import Search from "./pages/Search";
import SpaDetail from "./pages/SpaDetail";
import BookingFlow from "./pages/BookingFlow";
import ClaimPage from "./pages/ClaimPage";
import BookingConfirmed from "./pages/BookingConfirmed";
import Destinations from "./pages/Destinations";
import DestinationPage from "./pages/DestinationPage";
import Categories from "./pages/Categories";
import CategoryPage from "./pages/CategoryPage";
import Deals from "./pages/Deals";
import TopRated from "./pages/TopRated";
import NearMe from "./pages/NearMe";
import Doorstep from "./pages/Doorstep";
import BlogList from "./pages/BlogList";
import BlogPost from "./pages/BlogPost";
import AuthPage from "./pages/AuthPage";
import PartnerLoginPage from "./pages/PartnerLoginPage";
import ForgotPasswordPage from "./pages/ForgotPasswordPage";
import ResetPasswordPage from "./pages/ResetPasswordPage";
import ListYourSpa from "./pages/ListYourSpa";
import Account from "./pages/Account";
import SpaDashboard from "./pages/SpaDashboard";
import AdminDashboard from "./pages/AdminDashboard";
import NotFound from "./pages/NotFound";

function ScrollToTop() {
  const { pathname } = useLocation();
  React.useEffect(() => {
    window.scrollTo(0, 0);
  }, [pathname]);
  return null;
}

ReactDOM.createRoot(document.getElementById("root")!).render(
  <React.StrictMode>
    <HelmetProvider>
      <AppProvider>
        <ToastProvider>
          <BrowserRouter>
            <ScrollToTop />
            <Routes>
              <Route element={<Layout />}>
                <Route path="/" element={<Home />} />
                <Route path="/search" element={<Search />} />
                <Route path="/spas/:slug" element={<SpaDetail />} />
                <Route path="/spas/:slug/book" element={<BookingFlow />} />
                <Route path="/spas/:slug/:treatmentSlug" element={<SpaDetail />} />
                <Route path="/booking/:ref" element={<BookingConfirmed />} />
                <Route path="/claim/:id" element={<ClaimPage />} />
                <Route path="/destinations" element={<Destinations />} />
                <Route path="/destinations/:country/:city" element={<DestinationPage />} />
                <Route path="/categories" element={<Categories />} />
                <Route path="/categories/:slug" element={<CategoryPage />} />
                <Route path="/deals" element={<Deals />} />
                <Route path="/top-rated" element={<TopRated />} />
                <Route path="/spa-near-me" element={<NearMe />} />
                <Route path="/doorstep" element={<Doorstep />} />
                <Route path="/blog" element={<BlogList />} />
                <Route path="/blog/:slug" element={<BlogPost />} />
                <Route path="/signin" element={<AuthPage />} />
                <Route path="/partner-login" element={<PartnerLoginPage />} />
                <Route path="/register" element={<AuthPage />} />
                <Route path="/forgot-password" element={<ForgotPasswordPage />} />
                <Route path="/reset-password" element={<ResetPasswordPage />} />
                <Route path="/list-your-spa" element={<ListYourSpa />} />
                <Route path="/account" element={<Account />} />
                <Route path="/account/:tab" element={<Account />} />
                <Route path="/spa-dashboard" element={<SpaDashboard />} />
                <Route path="/spa-dashboard/:tab" element={<SpaDashboard />} />
                <Route path="/spa-dashboard/:tab/:spaId" element={<SpaDashboard />} />
                <Route path="/admin" element={<AdminDashboard />} />
                <Route path="/admin/:tab" element={<AdminDashboard />} />
                <Route path="/home" element={<Navigate to="/" replace />} />
                <Route path="*" element={<NotFound />} />
              </Route>
            </Routes>
          </BrowserRouter>
        </ToastProvider>
      </AppProvider>
    </HelmetProvider>
  </React.StrictMode>
);
