import { Toaster } from "@/components/ui/toaster";
import { Toaster as Sonner } from "@/components/ui/sonner";
import { TooltipProvider } from "@/components/ui/tooltip";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { BrowserRouter, Routes, Route } from "react-router-dom";
import { AuthProvider } from "@/contexts/AuthContext";
import { ProtectedRoute } from "@/components/ProtectedRoute";
import ClosetLandingPage from "./pages/ClosetLandingPage";
import Auth from "./pages/Auth";
import EmailConfirm from "./pages/EmailConfirm";
import Dashboard from "./pages/Dashboard";
import DesignPage from "./pages/DesignPage";
import VisualEditorPage from "./pages/VisualEditorPage";
import MenuPage from "./pages/MenuPage";
import Orders from "./pages/Orders";
import PDVOrdersPage from "./pages/PDVOrdersPage";
import AnalyticsDashboard from "./pages/AnalyticsDashboard";
import BairrosManagement from "./pages/BairrosManagement";
import CategoriesManagement from "./pages/CategoriesManagement";
import ColorsManagement from "./pages/ColorsManagement";
import SizesManagement from "./pages/SizesManagement";
import { AdminPanel } from "./pages/AdminPanel";
import PrivacyPolicyPage from "./pages/PrivacyPolicyPage";
import { TermsOfUse } from "./pages/TermsOfUse";
import OrderTrackingLandingPage from "./pages/OrderTrackingLandingPage";
import OrderTrackingDetailPage from "./pages/OrderTrackingDetailPage";
import NotFound from "./pages/NotFound";

const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      staleTime: 5 * 60 * 1000, // 5 minutes
      gcTime: 10 * 60 * 1000, // 10 minutes (formerly cacheTime)
      refetchOnWindowFocus: false, // Prevent unnecessary refetches on tab switch
      refetchOnReconnect: true, // Still refetch when connection is restored
      retry: 2,
    },
  },
});

const App = () => (
  <QueryClientProvider client={queryClient}>
    <TooltipProvider>
      <Toaster />
      <Sonner />
      <AuthProvider>
        <BrowserRouter>
          <Routes>
            {/* Landing page */}
            <Route path="/" element={<ClosetLandingPage />} />
            
            {/* Authentication */}
            <Route path="/auth" element={<Auth />} />
            <Route path="/auth/confirm" element={<EmailConfirm />} />
            
            {/* Privacy Policy */}
            <Route path="/privacy-policy" element={<PrivacyPolicyPage />} />
            
            {/* Terms of Use */}
            <Route path="/terms-of-use" element={<TermsOfUse />} />
            
            {/* Protected dashboard route */}
            <Route 
              path="/dashboard" 
              element={
                <ProtectedRoute>
                  <Dashboard />
                </ProtectedRoute>
              } 
            />
            
            {/* Design page route */}
            <Route 
              path="/dashboard/design" 
              element={
                <ProtectedRoute>
                  <DesignPage />
                </ProtectedRoute>
              } 
            />

            {/* Visual Editor page route */}
            <Route 
              path="/dashboard/visual-editor" 
              element={
                <ProtectedRoute>
                  <VisualEditorPage />
                </ProtectedRoute>
              } 
            />
            
            {/* Orders management route */}
            <Route 
              path="/orders" 
              element={
                <ProtectedRoute>
                  <Orders />
                </ProtectedRoute>
              } 
            />
            
            {/* PDV Orders route */}
            <Route 
              path="/pdv-orders" 
              element={
                <ProtectedRoute>
                  <PDVOrdersPage />
                </ProtectedRoute>
              } 
            />
            
            {/* Analytics Dashboard route */}
            <Route 
              path="/analytics-dashboard" 
              element={
                <ProtectedRoute>
                  <AnalyticsDashboard />
                </ProtectedRoute>
              } 
            />
            
            {/* Bairros Management route */}
            <Route 
              path="/dashboard/bairros" 
              element={
                <ProtectedRoute>
                  <BairrosManagement />
                </ProtectedRoute>
              } 
            />
            
            {/* Categories Management route */}
            <Route 
              path="/dashboard/categories" 
              element={
                <ProtectedRoute>
                  <CategoriesManagement />
                </ProtectedRoute>
              } 
            />
            
            {/* Colors Management route */}
            <Route 
              path="/dashboard/cores" 
              element={
                <ProtectedRoute>
                  <ColorsManagement />
                </ProtectedRoute>
              } 
            />
            
            {/* Sizes Management route */}
            <Route 
              path="/dashboard/tamanhos" 
              element={
                <ProtectedRoute>
                  <SizesManagement />
                </ProtectedRoute>
              } 
            />
            
            {/* Admin Panel route */}
            <Route 
              path="/panel-admin" 
              element={
                <ProtectedRoute>
                  <AdminPanel />
                </ProtectedRoute>
              } 
            />
            
            {/* Order Tracking Routes */}
            <Route path="/pedidos" element={<OrderTrackingLandingPage />} />
            <Route path="/pedidos/:order_id" element={<OrderTrackingDetailPage />} />
            
            {/* Tenant-specific order tracking routes */}
            <Route path="/:slug/pedidos/:memorable_order_id" element={<OrderTrackingDetailPage />} />
            
            {/* Public menu pages for each tenant */}
            <Route path="/:slug" element={<MenuPage />} />
            
            {/* Catch-all route */}
            <Route path="*" element={<NotFound />} />
          </Routes>
        </BrowserRouter>
      </AuthProvider>
    </TooltipProvider>
  </QueryClientProvider>
);

export default App;
