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, HashRouter, Routes, Route } from "react-router-dom";
import ErrorBoundary from "@/components/ErrorBoundary";
import ScrollToTop from "@/components/ScrollToTop";
import ScrollToTopButton from "@/components/ScrollToTopButton";
import HttpsRedirect from "@/components/HttpsRedirect";
import { AuthProvider } from "@/contexts/AuthContext";
import { AdsProvider } from "@/contexts/AdsContext";
import Index from "./pages/Index";
import MergePDF from "./pages/MergePDF";
import SplitPDF from "./pages/SplitPDF";
import CompressPDF from "./pages/CompressPDF";
import RotatePDF from "./pages/RotatePDF";
import WatermarkPDF from "./pages/WatermarkPDF";

import EditPDF from "./pages/EditPDF";

import SignPDF from "./pages/SignPDF";
import CropPDF from "./pages/CropPDF";
import OrganizePDF from "./pages/OrganizePDF";
import ImageConverter from "./pages/ImageConverter";
import ImageCompressor from "./pages/ImageCompressor";
import ImageResizer from "./pages/ImageResizer";
import VideoConverter from "./pages/VideoConverter";
import VideoCompressor from "./pages/VideoCompressor";
import ExtractAudio from "./pages/ExtractAudio";
import VideoToGif from "./pages/VideoToGif";
import AudioConverter from "./pages/AudioConverter";
import AudioCompressor from "./pages/AudioCompressor";
import AudioNormalizer from "./pages/AudioNormalizer";
import PDFToImage from "./pages/PDFToImage";
import ImageCropper from "./pages/ImageCropper";
import ImageRotator from "./pages/ImageRotator";
import VideoTrimmer from "./pages/VideoTrimmer";
import VideoMerger from "./pages/VideoMerger";
import VideoRotator from "./pages/VideoRotator";
import VideoSpeed from "./pages/VideoSpeed";
import AudioTrimmer from "./pages/AudioTrimmer";
import AudioJoiner from "./pages/AudioJoiner";
import Support from "./pages/Support";
import Privacy from "./pages/Privacy";
import Terms from "./pages/Terms";
import Security from "./pages/Security";
import Status from "./pages/Status";
import Cookies from "./pages/Cookies";
import GDPR from "./pages/GDPR";
import NotFound from "./pages/NotFound";

import ConverterPairPage from "./pages/ConverterPairPage";
import Blog from "./pages/Blog";
import BlogPost from "./pages/BlogPost";
import About from "./pages/About";
import Contact from "./pages/Contact";
import HelpCenter from "./pages/HelpCenter";
import GettingStarted from "./pages/guides/GettingStarted";
import SecurityGuide from "./pages/guides/Security";
import Troubleshooting from "./pages/guides/Troubleshooting";
import FreePDFTools from "./pages/FreePDFTools";
import FreeImageTools from "./pages/FreeImageTools";
import FreeVideoTools from "./pages/FreeVideoTools";
import FreeAudioTools from "./pages/FreeAudioTools";
import ToolsForTeachers from "./pages/ToolsForTeachers";
import ToolsForCreators from "./pages/ToolsForCreators";
import ToolsForBusiness from "./pages/ToolsForBusiness";

const queryClient = new QueryClient();

// Check if running in iframe (Lovable preview)
const isInIframe = typeof window !== 'undefined' && window.self !== window.top;
const Router = isInIframe ? HashRouter : BrowserRouter;

const App = () => (
  <ErrorBoundary>
    <QueryClientProvider client={queryClient}>
      <AuthProvider>
        <AdsProvider>
          <TooltipProvider>
            <Toaster />
            <Sonner />
            <Router>
              <HttpsRedirect />
              <ScrollToTop />
              <ScrollToTopButton />
          <Routes>
            <Route path="/" element={<Index />} />
            <Route path="/auth" element={<Index />} />
            
            {/* Blog Routes */}
            <Route path="/blog" element={<Blog />} />
            <Route path="/blog/:slug" element={<BlogPost />} />
            
            {/* Information Pages */}
            <Route path="/about" element={<About />} />
            <Route path="/contact" element={<Contact />} />
            <Route path="/help" element={<HelpCenter />} />
            <Route path="/support" element={<Support />} />
            
            {/* Category Landing Pages */}
            <Route path="/free-pdf-tools" element={<FreePDFTools />} />
            <Route path="/free-image-tools" element={<FreeImageTools />} />
            <Route path="/free-video-tools" element={<FreeVideoTools />} />
            <Route path="/free-audio-tools" element={<FreeAudioTools />} />
            
            {/* Industry Landing Pages */}
            <Route path="/tools-for-teachers" element={<ToolsForTeachers />} />
            <Route path="/tools-for-content-creators" element={<ToolsForCreators />} />
            <Route path="/tools-for-small-business" element={<ToolsForBusiness />} />
            
            {/* Guide Pages */}
            <Route path="/guides/getting-started" element={<GettingStarted />} />
            <Route path="/guides/security" element={<SecurityGuide />} />
            <Route path="/guides/troubleshooting" element={<Troubleshooting />} />
            
            {/* PDF Tools */}
            <Route path="/merge" element={<MergePDF />} />
            <Route path="/split" element={<SplitPDF />} />
            <Route path="/compress" element={<CompressPDF />} />
            
            <Route path="/rotate" element={<RotatePDF />} />
            <Route path="/watermark" element={<WatermarkPDF />} />
            
            <Route path="/edit" element={<EditPDF />} />
            
            <Route path="/sign" element={<SignPDF />} />
            <Route path="/crop" element={<CropPDF />} />
            <Route path="/organize" element={<OrganizePDF />} />
            <Route path="/pdf-to-image" element={<PDFToImage />} />
            
            {/* Image Tools */}
            <Route path="/image-converter" element={<ImageConverter />} />
            <Route path="/image-compressor" element={<ImageCompressor />} />
            <Route path="/image-resizer" element={<ImageResizer />} />
            <Route path="/image-cropper" element={<ImageCropper />} />
            <Route path="/image-rotator" element={<ImageRotator />} />
            
            {/* Video Tools */}
            <Route path="/video-converter" element={<VideoConverter />} />
            <Route path="/video-compressor" element={<VideoCompressor />} />
            <Route path="/video-trimmer" element={<VideoTrimmer />} />
            <Route path="/video-merger" element={<VideoMerger />} />
            <Route path="/video-rotator" element={<VideoRotator />} />
            <Route path="/video-speed" element={<VideoSpeed />} />
            <Route path="/video-to-gif" element={<VideoToGif />} />
            <Route path="/extract-audio" element={<ExtractAudio />} />
            
            {/* Audio Tools */}
            <Route path="/audio-converter" element={<AudioConverter />} />
            <Route path="/audio-compressor" element={<AudioCompressor />} />
            <Route path="/audio-normalizer" element={<AudioNormalizer />} />
            <Route path="/audio-trimmer" element={<AudioTrimmer />} />
            <Route path="/audio-joiner" element={<AudioJoiner />} />
            
            {/* Legal Pages */}
            <Route path="/privacy" element={<Privacy />} />
            <Route path="/terms" element={<Terms />} />
            <Route path="/security" element={<Security />} />
            <Route path="/cookies" element={<Cookies />} />
            <Route path="/gdpr" element={<GDPR />} />
            <Route path="/status" element={<Status />} />
            
            {/* Programmatic SEO: Converter Pair Pages */}
            <Route path="/convert/:pair" element={<ConverterPairPage />} />

            {/* 404 Fallback */}
            <Route path="*" element={<NotFound />} />
          </Routes>
            </Router>
          </TooltipProvider>
        </AdsProvider>
      </AuthProvider>
    </QueryClientProvider>
  </ErrorBoundary>
);

export default App;
