import { Toaster } from "@/components/ui/toaster";
import { Toaster as Sonner } from "@/components/ui/sonner";
// Removed TooltipProvider due to React version conflict
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { BrowserRouter, Routes, Route } from "react-router-dom";
import { HelmetProvider } from 'react-helmet-async';
import Layout from "./components/Layout";
import ScrollToTop from "./components/ScrollToTop";
import Hotjar from "./components/Hotjar";
import Home from "./pages/Home";
import Artworks from "./pages/Artworks";
import About from "./pages/About";
import Contact from "./pages/Contact";
import News from "./pages/News";
import NewsArticle from "./pages/NewsArticle";
import PrintEditions from "./pages/PrintEditions";
import PrintView from "./pages/PrintView";
import ViewingRoom from "./pages/ViewingRoom";
import NotFound from "./pages/NotFound";

import PaymentSuccess from "./pages/PaymentSuccess";
import PaymentCanceled from "./pages/PaymentCanceled";
import HerbstHogman from "./pages/HerbstHogman";
import WhisperingGame from "./pages/WhisperingGame";
import Auth from "./pages/Auth";
import CourseDashboard from "./pages/CourseDashboard";
import MyCourses from "./pages/MyCourses";
import CourseEnroll from "./pages/CourseEnroll";
import ChapterView from "./pages/ChapterView";
import AdminVideos from "./pages/AdminVideos";
import { ProtectedRoute } from "./components/ProtectedRoute";
import { AdminRoute } from "./components/AdminRoute";
import { CartProvider } from "./context/CartContext";
import { AuthProvider } from "./context/AuthContext";
import { AdminLayout } from "./components/admin/AdminLayout";
import Dashboard from "./pages/admin/Dashboard";
import ArtworksList from "./pages/admin/ArtworksList";
import ArtworkForm from "./pages/admin/ArtworkForm";
import PrintsList from "./pages/admin/PrintsList";
import PrintForm from "./pages/admin/PrintForm";
import NewsList from "./pages/admin/NewsList";
import NewsForm from "./pages/admin/NewsForm";
import OrdersList from "./pages/admin/OrdersList";
import ArtworkPurchase from "./pages/ArtworkPurchase";

const queryClient = new QueryClient();

const App = () => (
  <HelmetProvider>
    <QueryClientProvider client={queryClient}>
      <Toaster />
      <Sonner />
      <Hotjar />
      <BrowserRouter>
        <ScrollToTop />
        <AuthProvider>
          <CartProvider>
          <Routes>
            <Route path="/buy/:slug" element={<ArtworkPurchase />} />
            <Route path="/herbst-hogman" element={<HerbstHogman />} />
            <Route path="/whispering-game" element={<WhisperingGame />} />
            <Route path="/auth" element={<Auth />} />
            <Route path="/my-courses" element={<ProtectedRoute><MyCourses /></ProtectedRoute>} />
            <Route path="/course/:slug" element={<ProtectedRoute><CourseDashboard /></ProtectedRoute>} />
            <Route path="/course/:slug/enroll" element={<ProtectedRoute><CourseEnroll /></ProtectedRoute>} />
            <Route path="/course/:courseSlug/chapter/:chapterId" element={<ProtectedRoute><ChapterView /></ProtectedRoute>} />
            <Route path="/admin/*" element={<AdminRoute><AdminLayout /></AdminRoute>}>
              <Route index element={<Dashboard />} />
              <Route path="artworks" element={<ArtworksList />} />
              <Route path="artworks/new" element={<ArtworkForm />} />
              <Route path="artworks/:id" element={<ArtworkForm />} />
              <Route path="prints" element={<PrintsList />} />
              <Route path="prints/new" element={<PrintForm />} />
              <Route path="prints/:id" element={<PrintForm />} />
              <Route path="news" element={<NewsList />} />
              <Route path="news/new" element={<NewsForm />} />
              <Route path="news/:id" element={<NewsForm />} />
              <Route path="videos" element={<AdminVideos />} />
              <Route path="orders" element={<OrdersList />} />
            </Route>
            <Route path="/studio/*" element={<AdminRoute><AdminLayout /></AdminRoute>}>
              <Route index element={<Dashboard />} />
              <Route path="artworks" element={<ArtworksList />} />
              <Route path="artworks/new" element={<ArtworkForm />} />
              <Route path="artworks/:id" element={<ArtworkForm />} />
              <Route path="prints" element={<PrintsList />} />
              <Route path="prints/new" element={<PrintForm />} />
              <Route path="prints/:id" element={<PrintForm />} />
              <Route path="news" element={<NewsList />} />
              <Route path="news/new" element={<NewsForm />} />
              <Route path="news/:id" element={<NewsForm />} />
              <Route path="videos" element={<AdminVideos />} />
              <Route path="orders" element={<OrdersList />} />
            </Route>
            <Route path="/*" element={
              <Layout>
                <Routes>
                  <Route path="/" element={<Home />} />
                  <Route path="/artworks" element={<Artworks />} />
                  <Route path="/about" element={<About />} />
                  <Route path="/contact" element={<Contact />} />
                  <Route path="/news" element={<News />} />
                  <Route path="/news/:slug" element={<NewsArticle />} />
                  <Route path="/print-editions" element={<PrintEditions />} />
                  <Route path="/print-view" element={<PrintView />} />
                  <Route path="/viewing-room" element={<ViewingRoom />} />
                  
                  <Route path="/payment-success" element={<PaymentSuccess />} />
                  <Route path="/payment-canceled" element={<PaymentCanceled />} />
                  <Route path="*" element={<NotFound />} />
                </Routes>
              </Layout>
            } />
          </Routes>
          </CartProvider>
        </AuthProvider>
      </BrowserRouter>
    </QueryClientProvider>
  </HelmetProvider>
);

export default App;
