import React, { Suspense, useEffect, Component, ErrorInfo, ReactNode } from 'react'
import { Switch, Route, useLocation } from "wouter"
import { queryClient } from "./lib/queryClient";
import { QueryClientProvider } from "@tanstack/react-query";
import { Toaster } from "@/components/ui/toaster";
import { TooltipProvider } from "@/components/ui/tooltip";
import ScrollToTop from "@/components/ScrollToTop";
import { LanguageManager } from "@/utils/i18n";
import MobileContactFooter from "@/components/MobileContactFooter";
import AdminToolbar from "@/components/AdminToolbar";
import ChatWidget from "./components/ChatWidget";
import CookieConsent from "./components/CookieConsent";
import { usePixelTracking } from "./hooks/usePixelTracking";
import { useAuth } from "@/hooks/useAuth";

// Import route modules
import { GermanRoutes } from "./routes/germanRoutes";
import { CroatianRoutes } from "./routes/croatianRoutes";
import { ItalianRoutes } from "./routes/italianRoutes";
import { CzechRoutes } from "./routes/czechRoutes";

// Dynamically import page components
const HomePage = React.lazy(() => import("./pages/home"));
const JuniorCampPage = React.lazy(() => import("./pages/junior-camp"));
const TeenProgramPage = React.lazy(() => import("./pages/teen-program"));
const ProgramiPage = React.lazy(() => import("./pages/programi"));
const CijenePage = React.lazy(() => import("./pages/cijene"));
const SmjestajPage = React.lazy(() => import("./pages/smjestaj"));
const NajcescaPitanjaPage = React.lazy(() => import("./pages/najcesca-pitanja"));
const DailySchedulePage = React.lazy(() => import("./pages/dnevni-raspored"));
const OxfordEnglishPage = React.lazy(() => import("./pages/oxford-english"));
const SportsPage = React.lazy(() => import("./pages/sports"));

const DigitalAcademyPage = React.lazy(() => import("./pages/digital-academy"));
const ArtFashionPage = React.lazy(() => import("./pages/art-fashion"));
const KampHrvatskogJezikaPage = React.lazy(() => import("./pages/kamp-hrvatskog-jezika"));
const KampTalijanskogJezikaPage = React.lazy(() => import("./pages/kamp-talijanskog-jezika"));
const KampNjemackogJezikaPage = React.lazy(() => import("./pages/kamp-njemackog-jezika"));
const KampFrancuskogJezikaPage = React.lazy(() => import("./pages/kamp-francuskog-jezika"));
const LeadershipPage = React.lazy(() => import("./pages/leadership"));
const JuniorAnimatorPage = React.lazy(() => import("./pages/junior-animator"));
const AboutPage = React.lazy(() => import("./pages/about"));
const ZastoEuroclubPage = React.lazy(() => import("./pages/zasto-euroclub"));
const LanguageRedirectPage = React.lazy(() => import("./pages/language-redirect"));
const AdminPage = React.lazy(() => import("./pages/admin"));
const LoginPage = React.lazy(() => import("./pages/login"));
const MediaPage = React.lazy(() => import("./pages/media"));
const AiAgentPage = React.lazy(() => import("./pages/ai-agent"));


const SEODashboardPage = React.lazy(() => import("./components/seo/SEODashboard"));
const BlogList = React.lazy(() => import("./pages/admin/blog-list"));
const BlogEditor = React.lazy(() => import("./pages/admin/blog-editor"));

// Static import for Blog to prevent lazy loading issues
import BlogIndex from "./pages/blog/blog-index";
import BlogPostPage from "./pages/blog/blog-post";

const HomePageEn = React.lazy(() => import("./pages/en/home"));
const JuniorCampPageEn = React.lazy(() => import("./pages/en/junior-camp"));
const TeenProgramPageEn = React.lazy(() => import("./pages/en/teen-program"));
const JuniorProgramsPageEn = React.lazy(() => import("./pages/en/junior-programs"));
const TeenProgramsPageEn = React.lazy(() => import("./pages/en/teen-programs"));
const EuroclubPricesPageEn = React.lazy(() => import("./pages/en/euroclub-prices"));
const AccommodationPageEn = React.lazy(() => import("./pages/en/accommodation").catch(err => {
  console.error('Failed to load accommodation page:', err);
  return { default: () => <div>Error loading accommodation page</div> };
}));
const FaqPageEn = React.lazy(() => import("./pages/en/faq"));
const DailyRoutinePageEn = React.lazy(() => import("./pages/en/daily-routine"));
const AboutPageEn = React.lazy(() => import("./pages/en/about"));
const OxfordEnglishPageEn = React.lazy(() => import("./pages/en/oxford-english"));
const DigitalAcademyPageEn = React.lazy(() => import("./pages/en/digital-academy"));
const SportsPageEn = React.lazy(() => import("./pages/en/sports"));
const ArtFashionPageEn = React.lazy(() => import("./pages/en/art-fashion"));
const LeadershipPageEn = React.lazy(() => import("./pages/en/leadership"));
const JuniorAnimatorPageEn = React.lazy(() => import("./pages/en/junior-animator"));
const CroatianCampPageEn = React.lazy(() => import("./pages/en/croatian-camp"));
const FrenchCampPageEn = React.lazy(() => import("./pages/en/french-camp"));
const GermanCampPageEn = React.lazy(() => import("./pages/en/german-camp"));
const ItalianCampPageEn = React.lazy(() => import("./pages/en/italian-camp"));
const NotFoundPage = React.lazy(() => import("./pages/not-found").catch(() => ({ default: () => <div>Page not found</div> })));
const AdventurePaket = React.lazy(() => import("./pages/adventure-paket"));

// Italian pages
const HomePageIt = React.lazy(() => import("./pages/it/home"));
const AboutPageIt = React.lazy(() => import("./pages/it/about"));
const AlloggioPageIt = React.lazy(() => import("./pages/it/alloggio"));
const PacchettoAvventuraPageIt = React.lazy(() => import("./pages/it/pacchetto-avventura"));
const ArtFashionPageIt = React.lazy(() => import("./pages/it/arte-moda"));
const CroatianCampPageIt = React.lazy(() => import("./pages/it/campo-croato"));
const DailyRoutinePageIt = React.lazy(() => import("./pages/it/routine-giornaliera"));
const AccademiaDigitalePageIt = React.lazy(() => import("./pages/it/accademia-digitale"));
const PrezziPageIt = React.lazy(() => import("./pages/it/prezzi"));
const FaqPageIt = React.lazy(() => import("./pages/it/faq"));
const FrenchCampPageIt = React.lazy(() => import("./pages/it/campo-francese"));
const GermanCampPageIt = React.lazy(() => import("./pages/it/campo-tedesco"));
const ItalianCampPageIt = React.lazy(() => import("./pages/it/campo-italiano"));
const JuniorAnimatorPageIt = React.lazy(() => import("./pages/it/junior-animator"));
const CampoJuniorPageIt = React.lazy(() => import("./pages/it/campo-junior"));
const OxfordEnglishPageIt = React.lazy(() => import("./pages/it/oxford-english"));
const PrenotazionePageIt = React.lazy(() => import("./pages/it/prenotazione"));
const SportPageIt = React.lazy(() => import("./pages/it/sport"));
const ProgrammaTeenPageIt = React.lazy(() => import("./pages/it/programma-teen"));
const ProgrammiPageIt = React.lazy(() => import("./pages/it/programmi"));
const ProgrammiJuniorPageIt = React.lazy(() => import("./pages/it/programmi-junior"));
const ProgrammiTeenPageIt = React.lazy(() => import("./pages/it/programmi-teen"));
const PrivacyPageIt = React.lazy(() => import("./pages/it/privacy"));
const TeenChallengerIt = React.lazy(() => import("./pages/it/teen-challenger"));

// German pages
const HomePageDe = React.lazy(() => import("./pages/de/home"));
const AboutPageDe = React.lazy(() => import("./pages/de/about"));
const AccommodationDe = React.lazy(() => import("./pages/de/unterkunft"));
const AdventurePackageDe = React.lazy(() => import("./pages/de/abenteuer-paket"));
const ArtFashionPageDe = React.lazy(() => import("./pages/de/kunst-mode"));
const CroatianCampDe = React.lazy(() => import("./pages/de/kroatisch-lernen"));
const DailyRoutineDe = React.lazy(() => import("./pages/de/tagesablauf"));
const DigitalAcademyDe = React.lazy(() => import("./pages/de/digital-akademie"));
const FaqPageDe = React.lazy(() => import("./pages/de/faq"));
const FrenchCampDe = React.lazy(() => import("./pages/de/franzoesisch-lernen"));
const GermanCampDe = React.lazy(() => import("./pages/de/deutsch-lernen"));
const ItalianCampDe = React.lazy(() => import("./pages/de/italienisch-lernen"));
const JuniorAnimatorDe = React.lazy(() => import("./pages/de/junior-animator"));
const JuniorCampDe = React.lazy(() => import("./pages/de/junior-camp"));
const JuniorProgramsDe = React.lazy(() => import("./pages/de/junior-programme"));
const TeenProgramDe = React.lazy(() => import("./pages/de/teen-programm"));
const TeenProgramsDe = React.lazy(() => import("./pages/de/teen-programme"));
const OxfordEnglishDe = React.lazy(() => import("./pages/de/oxford-english"));
const SportAkademieDe = React.lazy(() => import("./pages/de/sport-akademie"));
const LeadershipDe = React.lazy(() => import("./pages/de/leadership"));
const PreiseDe = React.lazy(() => import("./pages/de/preise"));
const TeenChallengerDe = React.lazy(() => import("./pages/de/teen-challenger"));

// Polish pages
const HomePagePl = React.lazy(() => import("./pages/pl/home"));
const JuniorCampPl = React.lazy(() => import("./pages/pl/junior-camp"));
const TeenProgramPl = React.lazy(() => import("./pages/pl/teen-program"));
const AdventurePackagePl = React.lazy(() => import("./pages/pl/adventure-package"));
const PricesPagePl = React.lazy(() => import("./pages/pl/euroclub-prices"));
const AboutPagePl = React.lazy(() => import("./pages/pl/about"));
const FaqPagePl = React.lazy(() => import("./pages/pl/faq"));
const AccommodationPagePl = React.lazy(() => import("./pages/pl/accommodation"));
const HarmonogramDniaPl = React.lazy(() => import("./pages/pl/harmonogram-dnia"));
const TeenChallengerPl = React.lazy(() => import("./pages/pl/teen-challenger"));
const CroatianCampPl = React.lazy(() => import("./pages/pl/croatian-camp"));
const FrenchCampPl = React.lazy(() => import("./pages/pl/french-camp"));
const GermanCampPl = React.lazy(() => import("./pages/pl/german-camp"));
const ItalianCampPl = React.lazy(() => import("./pages/pl/italian-camp"));

// French pages
const HomePageFr = React.lazy(() => import("./pages/fr/home"));
const AboutPageFr = React.lazy(() => import("./pages/fr/about"));
const EuroclubPricesFr = React.lazy(() => import("./pages/fr/euroclub-prices"));
const JuniorProgramsFr = React.lazy(() => import("./pages/fr/junior-programs"));
const TeenProgramsFr = React.lazy(() => import("./pages/fr/teen-programs"));
const JuniorCampFr = React.lazy(() => import("./pages/fr/junior-camp"));
const TeenProgramFr = React.lazy(() => import("./pages/fr/teen-program"));
const ProgramiFr = React.lazy(() => import("./pages/fr/programi"));
const FaqFr = React.lazy(() => import("./pages/fr/faq"));
const AccommodationFr = React.lazy(() => import("./pages/fr/accommodation"));
const AdventurePackageFr = React.lazy(() => import("./pages/fr/adventure-package"));
const SportsFr = React.lazy(() => import("./pages/fr/sports"));
const OxfordEnglishFr = React.lazy(() => import("./pages/fr/oxford-english"));
const DigitalAcademyFr = React.lazy(() => import("./pages/fr/digital-academy"));
const DailyRoutineFr = React.lazy(() => import("./pages/fr/daily-routine"));
const ArtFashionFr = React.lazy(() => import("./pages/fr/art-fashion"));
const LeadershipFr = React.lazy(() => import("./pages/fr/leadership"));
const JuniorAnimatorFr = React.lazy(() => import("./pages/fr/junior-animator"));
const TeenChallengerFr = React.lazy(() => import("./pages/fr/teen-challenger"));
const FrenchCampFr = React.lazy(() => import("./pages/fr/french-camp"));
const CroatianCampFr = React.lazy(() => import("./pages/fr/croatian-camp"));
const GermanCampFr = React.lazy(() => import("./pages/fr/german-camp"));
const ItalianCampFr = React.lazy(() => import("./pages/fr/italian-camp"));
const SeaSunFunFr = React.lazy(() => import("./pages/fr/sea-sun-fun"));
const ReservationPageFr = React.lazy(() => import("./pages/fr/reservation"));
const TeacherFormFr = React.lazy(() => import("./pages/fr/teacher-form"));
const NotFoundPageFr = React.lazy(() => import("./pages/fr/not-found"));

// Slovenian pages
const HomePageSl = React.lazy(() => import("./pages/sl/home"));

// Russian pages
const HomePageRu = React.lazy(() => import("./pages/ru/home"));
const DetskiyLagerPageRu = React.lazy(() => import("./pages/ru/detskiy-lager"));
const MolodezhniyLagerPageRu = React.lazy(() => import("./pages/ru/molodezhniy-lager"));
const ProgrammyPageRu = React.lazy(() => import("./pages/ru/programmy"));
const TsenyPageRu = React.lazy(() => import("./pages/ru/tseny"));
const ONasPageRu = React.lazy(() => import("./pages/ru/o-nas"));
const ChastyeVoprosyPageRu = React.lazy(() => import("./pages/ru/chastye-voprosy"));
const RazmeshcheniyePageRu = React.lazy(() => import("./pages/ru/razmeshcheniye"));
const AdventurePaketRu = React.lazy(() => import("./pages/ru/adventure-paket"));
const DnevniRasporedRu = React.lazy(() => import("./pages/ru/dnevni-raspored"));
const OxfordEnglishRu = React.lazy(() => import("./pages/ru/oxford-english"));
const SportsRu = React.lazy(() => import("./pages/ru/sports"));
const DigitalAcademyRu = React.lazy(() => import("./pages/ru/digital-academy"));
const ArtFashionRu = React.lazy(() => import("./pages/ru/art-fashion"));
const LeadershipRu = React.lazy(() => import("./pages/ru/leadership"));
const JuniorAnimatorRu = React.lazy(() => import("./pages/ru/junior-animator"));
const KampHrvatskogJezikaRu = React.lazy(() => import("./pages/ru/kamp-hrvatskog-jezika"));
const KampTalijanskogJezikaRu = React.lazy(() => import("./pages/ru/kamp-talijanskog-jezika"));
const KampNjemackogJezikaRu = React.lazy(() => import("./pages/ru/kamp-njemackog-jezika"));
const KampFrancuskogJezikaRu = React.lazy(() => import("./pages/ru/kamp-francuskog-jezika"));
const JuniorProgramsRu = React.lazy(() => import("./pages/ru/junior-programs"));
const TeenProgramsRu = React.lazy(() => import("./pages/ru/teen-programs"));
const TeenChallengerRu = React.lazy(() => import("./pages/ru/teen-challenger"));
const OxfordEnglishTeenRu = React.lazy(() => import("./pages/ru/oxford-english-teen"));

// Hungarian pages
const HomePageHu = React.lazy(() => import("./pages/hu/home"));
const AboutPageHu = React.lazy(() => import("./pages/hu/about"));
const AccommodationPageHu = React.lazy(() => import("./pages/hu/accommodation"));
const EuroclubPricesPageHu = React.lazy(() => import("./pages/hu/euroclub-prices"));
const ProgramiPageHu = React.lazy(() => import("./pages/hu/programi"));
const JuniorProgramsPageHu = React.lazy(() => import("./pages/hu/junior-programs"));
const ReservationPageHu = React.lazy(() => import("./pages/hu/rezervacio"));
const TeenProgramsPageHu = React.lazy(() => import("./pages/hu/teen-programs"));
const OxfordEnglishPageHu = React.lazy(() => import("./pages/hu/oxford-english"));
const DigitalAcademyPageHu = React.lazy(() => import("./pages/hu/digital-academy"));
const SportsPageHu = React.lazy(() => import("./pages/hu/sports"));
const ArtFashionPageHu = React.lazy(() => import("./pages/hu/art-fashion"));
const LeadershipPageHu = React.lazy(() => import("./pages/hu/leadership"));
const FrenchCampPageHu = React.lazy(() => import("./pages/hu/french-camp"));
const GermanCampPageHu = React.lazy(() => import("./pages/hu/german-camp"));
const ItalianCampPageHu = React.lazy(() => import("./pages/hu/italian-camp"));
const CroatianCampPageHu = React.lazy(() => import("./pages/hu/croatian-camp"));
const AdventurePackagePageHu = React.lazy(() => import("./pages/hu/adventure-package"));

const DailyRoutinePageHu = React.lazy(() => import("./pages/hu/daily-routine"));
const FaqPageHu = React.lazy(() => import("./pages/hu/faq"));
const SeaSunFunPageHu = React.lazy(() => import("./pages/hu/sea-sun-fun"));
const TeenChallengerPageHu = React.lazy(() => import("./pages/hu/teen-challenger"));
const JuniorAnimatorPageHu = React.lazy(() => import("./pages/hu/junior-animator"));
const TeacherFormPageHu = React.lazy(() => import("./pages/hu/teacher-form"));
const WhyEuroclubPageHu = React.lazy(() => import("./pages/hu/why-euroclub"));

// English Christmas Offer Page
// Removed ChristmasOfferPageEn

// English Teacher Form Page
const TeacherFormPageEn = React.lazy(() => import("./pages/en/teacher-form"));


// ═══════════════════════════════════════════════════════════════════════
//  CLIENT ERROR REPORTING
// ═══════════════════════════════════════════════════════════════════════

async function reportClientError(error: Error, errorInfo?: ErrorInfo, extra?: Record<string, unknown>) {
  try {
    const payload = {
      message: error.message || "Unknown error",
      stack: error.stack || undefined,
      componentStack: errorInfo?.componentStack || undefined,
      url: window.location.href,
      userAgent: navigator.userAgent,
      timestamp: new Date().toISOString(),
      extra,
    };

    await fetch("/api/log-client-error", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify(payload),
      // Don't block UI on this request
      keepalive: true,
    });
  } catch (e) {
    // If reporting itself fails, at least log to console
    console.error("[Client Error Reporter] Failed to send error to server:", e);
  }
}

// Global unhandled promise rejection listener
if (typeof window !== "undefined") {
  window.addEventListener("unhandledrejection", (event) => {
    const error = event.reason instanceof Error ? event.reason : new Error(String(event.reason));
    reportClientError(error, undefined, { source: "unhandledrejection" });
  });
}

// ═══════════════════════════════════════════════════════════════════════
//  ERROR BOUNDARY COMPONENTS
// ═══════════════════════════════════════════════════════════════════════

interface Props {
  children: ReactNode;
}

interface State {
  hasError: boolean;
  errorId: string | null;
}

class ErrorBoundary extends Component<Props, State> {
  constructor(props: Props) {
    super(props);
    this.state = { hasError: false, errorId: null };
  }

  static getDerivedStateFromError(_error: Error): State {
    return { hasError: true, errorId: null };
  }

  componentDidCatch(error: Error, errorInfo: ErrorInfo) {
    console.warn("[ErrorBoundary] Caught error:", error);
    console.warn("[ErrorBoundary] Component stack:", errorInfo.componentStack);

    reportClientError(error, errorInfo, { boundaryType: "global" }).then((response) => {
      // We can't easily get the errorId from the async response here,
      // so we generate a local one for display
      const localErrorId = `client-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 6)}`;
      this.setState({ errorId: localErrorId });
    });
  }

  render() {
    if (this.state.hasError) {
      return (
        <div className="min-h-screen bg-background flex items-center justify-center p-4">
          <div className="text-center max-w-md mx-auto bg-white rounded-2xl shadow-xl border border-slate-200 p-8">
            <div className="w-16 h-16 bg-red-100 rounded-full flex items-center justify-center mx-auto mb-4">
              <svg className="w-8 h-8 text-red-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
                <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" />
              </svg>
            </div>
            <h2 className="text-2xl font-bold mb-2 text-slate-800">Something went wrong</h2>
            <p className="text-slate-600 mb-4">
              We apologize for the inconvenience. Our team has been notified and is working on a fix.
            </p>
            {this.state.errorId && (
              <div className="bg-slate-50 rounded-lg p-3 mb-4 border border-slate-200">
                <p className="text-xs text-slate-500 uppercase tracking-wide mb-1">Error Reference</p>
                <code className="text-sm font-mono text-slate-700">{this.state.errorId}</code>
              </div>
            )}
            <div className="flex flex-col gap-2">
              <button
                onClick={() => window.location.reload()}
                className="px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 transition-colors font-medium"
              >
                Refresh Page
              </button>
              <button
                onClick={() => this.setState({ hasError: false, errorId: null })}
                className="px-4 py-2 bg-white text-slate-600 border border-slate-300 rounded-lg hover:bg-slate-50 transition-colors font-medium"
              >
                Try Again
              </button>
            </div>
            <p className="text-xs text-slate-400 mt-4">
              If the problem persists, please contact us at{" "}
              <a href="mailto:office@euroclub.hr" className="text-blue-500 hover:underline">office@euroclub.hr</a>
            </p>
          </div>
        </div>
      );
    }

    return this.props.children;
  }
}

/**
 * Reservation-specific error boundary that captures form context.
 */
interface ReservationErrorBoundaryProps {
  children: ReactNode;
  formData?: Record<string, unknown>;
}

interface ReservationErrorBoundaryState {
  hasError: boolean;
  errorId: string | null;
}

export class ReservationErrorBoundary extends Component<
  ReservationErrorBoundaryProps,
  ReservationErrorBoundaryState
> {
  constructor(props: ReservationErrorBoundaryProps) {
    super(props);
    this.state = { hasError: false, errorId: null };
  }

  static getDerivedStateFromError(_error: Error): ReservationErrorBoundaryState {
    return { hasError: true, errorId: null };
  }

  componentDidCatch(error: Error, errorInfo: ErrorInfo) {
    console.warn("[ReservationErrorBoundary] Caught error:", error);

    const localErrorId = `booking-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 6)}`;
    this.setState({ errorId: localErrorId });

    reportClientError(error, errorInfo, {
      boundaryType: "reservation",
      formData: this.props.formData || null,
    });
  }

  render() {
    if (this.state.hasError) {
      return (
        <div className="p-6 bg-white rounded-2xl shadow-xl border border-red-200 max-w-lg mx-auto">
          <div className="text-center">
            <div className="w-14 h-14 bg-red-100 rounded-full flex items-center justify-center mx-auto mb-3">
              <svg className="w-7 h-7 text-red-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
                <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" />
              </svg>
            </div>
            <h3 className="text-xl font-bold mb-2 text-slate-800">Booking form error</h3>
            <p className="text-slate-600 mb-3 text-sm">
              We encountered an error while processing your booking. Please don't worry — your information is safe.
            </p>
            {this.state.errorId && (
              <div className="bg-slate-50 rounded-lg p-2 mb-3 border border-slate-200">
                <p className="text-xs text-slate-500 uppercase tracking-wide">Reference</p>
                <code className="text-sm font-mono text-slate-700">{this.state.errorId}</code>
              </div>
            )}
            <div className="flex flex-col gap-2">
              <button
                onClick={() => window.location.reload()}
                className="px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 transition-colors font-medium text-sm"
              >
                Refresh and Try Again
              </button>
              <button
                onClick={() => this.setState({ hasError: false, errorId: null })}
                className="px-4 py-2 bg-white text-slate-600 border border-slate-300 rounded-lg hover:bg-slate-50 transition-colors font-medium text-sm"
              >
                Go Back to Form
              </button>
            </div>
            <p className="text-xs text-slate-400 mt-3">
              Need help? Email us at{" "}
              <a href="mailto:office@euroclub.hr" className="text-blue-500 hover:underline">office@euroclub.hr</a>
            </p>
          </div>
        </div>
      );
    }

    return this.props.children;
  }
}

// Loading component for better UX during code splitting
const PageSkeleton = React.memo(() => (
  <div className="min-h-screen bg-background">
    <div className="animate-pulse">
      <div className="h-16 bg-gray-200 mb-4"></div>
      <div className="container mx-auto px-4">
        <div className="h-8 bg-gray-200 rounded mb-4 w-1/3"></div>
        <div className="h-4 bg-gray-200 rounded mb-2"></div>
        <div className="h-4 bg-gray-200 rounded mb-2 w-5/6"></div>
        <div className="h-4 bg-gray-200 rounded mb-4 w-4/6"></div>
      </div>
    </div>
  </div>
));

// Custom component for protected admin routes
const AdminRoute = ({ path, component: Component }: { path: string; component: React.ComponentType<any> }) => {
  return (
    <Route path={path}>
      {(params) => {
        const { user, isLoading, isAuthenticated, isAdmin } = useAuth();
        const [, setLocation] = useLocation();

        useEffect(() => {
          if (!isLoading && (!isAuthenticated || !user || !isAdmin)) {
            // Use replace to avoid adding to browser history
            if (!isAuthenticated || !user) {
              setLocation('/login', { replace: true });
            } else if (!isAdmin) {
              setLocation('/', { replace: true });
            }
          }
        }, [isLoading, isAuthenticated, user, isAdmin, setLocation]);

        if (isLoading) {
          return <PageSkeleton />;
        }

        if (!isAuthenticated || !user || !isAdmin) {
          return null;
        }

        return <Component {...params} />;
      }}
    </Route>
  );
};

function Router() {
  usePixelTracking();
  return (
    <ErrorBoundary>
      <div>
        <ScrollToTop />
        <Suspense fallback={<PageSkeleton />}>
          <Switch>

            {/* Blog Routes - HR Only - Moved to top for priority matching */}
            <Route path="/hr/blog" component={BlogIndex} />
            <Route path="/hr/blog/:slug" component={BlogPostPage} />

            {/* Blog Routes - English */}
            <Route path="/en/blog" component={BlogIndex} />
            <Route path="/en/blog/:slug" component={BlogPostPage} />

            {/* Croatian routes */}
            <Route path="/hr" component={HomePage} />
            <Route path="/hr/ljetni-kamp-za-djecu" component={JuniorCampPage} />
            <Route path="/hr/ljetni-kamp-za-tinejdzere" component={TeenProgramPage} />
            <Route path="/hr/programi" component={ProgramiPage} />
            <Route path="/hr/junior-programi" component={ProgramiPage} />
            <Route path="/hr/teen-programi" component={React.lazy(() => import("./pages/teen-programi"))} />
            <Route path="/hr/teen-programs" component={React.lazy(() => import("./pages/teen-programi"))} />
            <Route path="/hr/cijene" component={CijenePage} />
            <Route path="/hr/smjestaj" component={SmjestajPage} />
            <Route path="/hr/najcesca-pitanja" component={NajcescaPitanjaPage} />
            <Route path="/hr/dnevni-raspored" component={DailySchedulePage} />
            <Route path="/hr/ljetni-kamp-engleskog-jezika" component={OxfordEnglishPage} />
            <Route path="/oxford-english" component={OxfordEnglishPage} />
            <Route path="/oxford-english-teen" component={React.lazy(() => import("./pages/oxford-english-teen"))} />
            <Route path="/hr/ljetni-sportski-kamp" component={SportsPage} />
            
            <Route path="/sports" component={SportsPage} />
            <Route path="/hr/kamp-digitalnih-vjestina" component={DigitalAcademyPage} />
            <Route path="/digital-academy" component={DigitalAcademyPage} />
            <Route path="/hr/glamour-fashion-kamp" component={ArtFashionPage} />
            <Route path="/art-fashion" component={ArtFashionPage} />
            <Route path="/hr/ljetni-kamp-hrvatskog-jezika" component={KampHrvatskogJezikaPage} />
            <Route path="/hr/ljetni-kamp-talijanskog-jezika" component={KampTalijanskogJezikaPage} />
            <Route path="/hr/ljetni-kamp-njemackog-jezika" component={KampNjemackogJezikaPage} />
            <Route path="/hr/ljetni-kamp-francuskog-jezika" component={KampFrancuskogJezikaPage} />
            <Route path="/hr/leadership-ljetni-kamp" component={LeadershipPage} />
            <Route path="/leadership" component={LeadershipPage} />
            <Route path="/hr/ljetni-kamp-javnog-nastupa" component={JuniorAnimatorPage} />
            <Route path="/junior-animator" component={JuniorAnimatorPage} />
            <Route path="/hr/o-nama" component={AboutPage} />
            <Route path="/hr/zasto-euroclub" component={ZastoEuroclubPage} />
            <Route path="/hr/adventure-paket" component={AdventurePaket} />
            
            <Route path="/hr/teen-challenger" component={React.lazy(() => import("./pages/teen-challenger"))} />
            <Route path="/hr/rezervacija" component={React.lazy(() => import("./pages/rezervacija"))} />

            {/* Root route - redirect to appropriate language */}
            <Route path="/" component={LanguageRedirectPage} />

            {/* Admin and special routes (no language prefix required) */}
            <AdminRoute path="/admin" component={AdminPage} />
            <Route path="/login" component={LoginPage} />
            <AdminRoute path="/media" component={MediaPage} />
            <AdminRoute path="/ai-agent" component={AiAgentPage} />
            <AdminRoute path="/admin/seo" component={SEODashboardPage} />
            <AdminRoute path="/admin/blog" component={BlogList} />
            <AdminRoute path="/admin/blog/new" component={BlogEditor} />
            <AdminRoute path="/admin/blog/edit/:id" component={BlogEditor} />

            {/* English routes - Updated to new URL structure */}
            <Route path="/en" component={HomePageEn} />
            <Route path="/en/junior-programs" component={JuniorProgramsPageEn} />
            <Route path="/en/teen-programs" component={TeenProgramsPageEn} />
            <Route path="/en/junior-camp" component={JuniorCampPageEn} />
            <Route path="/en/teen-program" component={TeenProgramPageEn} />
            {/* Legacy routes for backward compatibility */}
            <Route path="/en/summer-camp-for-children" component={JuniorCampPageEn} />
            <Route path="/en/summer-camp-for-teens" component={TeenProgramPageEn} />
            <Route path="/en/programs" component={JuniorProgramsPageEn} />
            <Route path="/en/prices" component={EuroclubPricesPageEn} />
            <Route path="/en/accommodation" component={AccommodationPageEn} />
            <Route path="/en/faq" component={FaqPageEn} />
            <Route path="/en/daily-routine" component={DailyRoutinePageEn} />
            <Route path="/en/about-us" component={AboutPageEn} />
            <Route path="/en/english-summer-camp" component={OxfordEnglishPageEn} />
            <Route path="/en/oxford-english" component={OxfordEnglishPageEn} />
            <Route path="/en/digital-academy" component={DigitalAcademyPageEn} />
            <Route path="/en/sports-summer-camp" component={SportsPageEn} />
            <Route path="/en/glamour-summer-academy" component={ArtFashionPageEn} />
            <Route path="/en/summer-teen-leadership-camp" component={LeadershipPageEn} />
            <Route path="/en/teen-summer-counselor-camp" component={JuniorAnimatorPageEn} />
            <Route path="/en/learn-croatian-in-croatia" component={CroatianCampPageEn} />
            <Route path="/en/french-summer-camp-croatia" component={FrenchCampPageEn} />
            <Route path="/en/german-summer-camp-croatia" component={GermanCampPageEn} />
            <Route path="/en/italian-summer-camp-croatia" component={ItalianCampPageEn} />
            <Route path="/en/reservation" component={React.lazy(() => import("./pages/en/reservation"))} />
            <Route path="/en/adventure-package" component={React.lazy(() => import("./pages/en/adventure-package"))} />
            <Route path="/en/teacher-form" component={TeacherFormPageEn} />
            <Route path="/en/sea-sun-fun" component={React.lazy(() => import("./pages/en/sea-sun-fun"))} />
            <Route path="/en/teen-challenger" component={React.lazy(() => import("./pages/en/teen-challenger"))} />

            {/* Slovenian Routes - Moved directly here to fix loading issues */}
            <Route path="/sl/about" component={React.lazy(() => import("./pages/sl/about"))} />
            <Route path="/sl/accommodation" component={React.lazy(() => import("./pages/sl/accommodation"))} />
            <Route path="/sl/adventure-package" component={React.lazy(() => import("./pages/sl/adventure-package"))} />
            <Route path="/sl/art-fashion" component={React.lazy(() => import("./pages/sl/art-fashion"))} />
            <Route path="/sl/croatian-camp" component={React.lazy(() => import("./pages/sl/croatian-camp"))} />

            <Route path="/sl/daily-routine" component={React.lazy(() => import("./pages/sl/daily-routine"))} />
            <Route path="/sl/digital-academy" component={React.lazy(() => import("./pages/sl/digital-academy"))} />
            <Route path="/sl/euroclub-prices" component={React.lazy(() => import("./pages/sl/euroclub-prices"))} />
            <Route path="/sl/faq" component={React.lazy(() => import("./pages/sl/faq"))} />
            <Route path="/sl/french-camp" component={React.lazy(() => import("./pages/sl/french-camp"))} />
            <Route path="/sl/german-camp" component={React.lazy(() => import("./pages/sl/german-camp"))} />
            <Route path="/sl/italian-camp" component={React.lazy(() => import("./pages/sl/italian-camp"))} />
            <Route path="/sl/junior-animator" component={React.lazy(() => import("./pages/sl/junior-animator"))} />
            <Route path="/sl/junior-camp" component={React.lazy(() => import("./pages/sl/junior-camp"))} />
            <Route path="/sl/junior-programs" component={React.lazy(() => import("./pages/sl/junior-programs"))} />
            <Route path="/sl/leadership" component={React.lazy(() => import("./pages/sl/leadership"))} />
            <Route path="/sl/oxford-english" component={React.lazy(() => import("./pages/sl/oxford-english"))} />
            <Route path="/sl/programi" component={React.lazy(() => import("./pages/sl/programi"))} />
            <Route path="/sl/reservation" component={React.lazy(() => import("./pages/sl/reservation"))} />
            <Route path="/sl/sports" component={React.lazy(() => import("./pages/sl/sports"))} />
            <Route path="/sl/teen-program" component={React.lazy(() => import("./pages/sl/teen-program"))} />
            <Route path="/sl/teen-programs" component={React.lazy(() => import("./pages/sl/teen-programs"))} />
            <Route path="/sl/not-found" component={React.lazy(() => import("./pages/sl/not-found"))} />

            {/* Slovenian home page - direct route BEFORE grouped routes to avoid capture by other components */}
            <Route path="/sl" component={HomePageSl} />
            <Route path="/sl/" component={HomePageSl} />

            {/* Hungarian routes */}
            <Route path="/hu" component={HomePageHu} />
            <Route path="/hu/" component={HomePageHu} />
            <Route path="/hu/rolunk" component={AboutPageHu} />
            <Route path="/hu/szallas" component={AccommodationPageHu} />
            <Route path="/hu/arak" component={EuroclubPricesPageHu} />
            <Route path="/hu/programok" component={ProgramiPageHu} />
            <Route path="/hu/junior-programs" component={JuniorProgramsPageHu} />
            <Route path="/hu/teen-programs" component={TeenProgramsPageHu} />
            <Route path="/hu/gyerek-tabor" component={JuniorProgramsPageHu} />
            <Route path="/hu/junior-tabor" component={JuniorProgramsPageHu} />
            <Route path="/hu/junior-programok" component={JuniorProgramsPageHu} />
            <Route path="/hu/tini-program" component={TeenProgramsPageHu} />
            <Route path="/hu/tini-tabor" component={TeenProgramsPageHu} />
            <Route path="/hu/oxford-angol" component={OxfordEnglishPageHu} />
            <Route path="/hu/digitalis-akademia" component={DigitalAcademyPageHu} />
            <Route path="/hu/sport" component={SportsPageHu} />
            <Route path="/hu/muveszet-es-csillogas" component={ArtFashionPageHu} />
            <Route path="/hu/vezetes-es-uzlet" component={LeadershipPageHu} />
            <Route path="/hu/junior-animator" component={JuniorAnimatorPageHu} />
            <Route path="/hu/francia-tabor" component={FrenchCampPageHu} />
            <Route path="/hu/nemet-tabor" component={GermanCampPageHu} />
            <Route path="/hu/olasz-tabor" component={ItalianCampPageHu} />
            <Route path="/hu/horvat-tabor" component={CroatianCampPageHu} />
            <Route path="/hu/kaland-paket" component={AdventurePackagePageHu} />
            <Route path="/hu/napi-munkarend" component={DailyRoutinePageHu} />

            <Route path="/hu/tanari-jelentkezes" component={TeacherFormPageHu} />
            <Route path="/hu/miert-euroclub" component={WhyEuroclubPageHu} />
            <Route path="/hu/faq" component={FaqPageHu} />
            <Route path="/hu/gyik" component={FaqPageHu} />
            <Route path="/hu/sea-sun-fun" component={SeaSunFunPageHu} />
            <Route path="/hu/teen-challenger" component={TeenChallengerPageHu} />
            <Route path="/hu/foglalat" component={ReservationPageHu} />

            {/* Italian routes */}
            {/* Italian routes - flattened to fix blocking issue */}
            <Route path="/it/" component={HomePageIt} />
            <Route path="/it/privacy" component={PrivacyPageIt} />
            <Route path="/it/chi-siamo" component={AboutPageIt} />
            <Route path="/it/alloggio" component={AlloggioPageIt} />
            <Route path="/it/arte-moda" component={ArtFashionPageIt} />
            <Route path="/it/campo-croato" component={CroatianCampPageIt} />
            <Route path="/it/campo-francese" component={FrenchCampPageIt} />
            <Route path="/it/campo-tedesco" component={GermanCampPageIt} />
            <Route path="/it/campo-italiano" component={ItalianCampPageIt} />
            <Route path="/it/junior-animator" component={JuniorAnimatorPageIt} />
            <Route path="/it/campo-junior" component={CampoJuniorPageIt} />
            <Route path="/it/pacchetto-avventura" component={PacchettoAvventuraPageIt} />
            <Route path="/it/routine-giornaliera" component={DailyRoutinePageIt} />
            <Route path="/it/accademia-digitale" component={AccademiaDigitalePageIt} />
            <Route path="/it/prezzi" component={PrezziPageIt} />
            <Route path="/it/faq" component={FaqPageIt} />
            <Route path="/it/oxford-english" component={OxfordEnglishPageIt} />
            <Route path="/it/prenotazione" component={PrenotazionePageIt} />
            <Route path="/it/sport" component={SportPageIt} />
            <Route path="/it/programma-teen" component={ProgrammaTeenPageIt} />
            <Route path="/it/programmi" component={ProgrammiPageIt} />
            <Route path="/it/programmi-junior" component={ProgrammiJuniorPageIt} />
            <Route path="/it/programmi-teen" component={ProgrammiTeenPageIt} />
            <Route path="/it/teen-challenger" component={TeenChallengerIt} />
            <Route path="/it" component={HomePageIt} />

            {/* German routes */}
            {/* German routes - flattened to fix blank page issue */}
            <Route path="/de/uber-uns" component={AboutPageDe} />
            <Route path="/de/unterkunft" component={AccommodationDe} />
            <Route path="/de/abenteuer-paket" component={AdventurePackageDe} />
            <Route path="/de/kunst-mode" component={ArtFashionPageDe} />
            <Route path="/de/kroatisch-lernen" component={CroatianCampDe} />
            <Route path="/de/tagesablauf" component={DailyRoutineDe} />
            <Route path="/de/digital-akademie" component={DigitalAcademyDe} />
            <Route path="/de/faq" component={FaqPageDe} />
            <Route path="/de/franzoesisch-lernen" component={FrenchCampDe} />
            <Route path="/de/deutsch-lernen" component={GermanCampDe} />
            <Route path="/de/italienisch-lernen" component={ItalianCampDe} />
            <Route path="/de/junior-animator" component={JuniorAnimatorDe} />
            <Route path="/de/junior-camp" component={JuniorCampDe} />
            <Route path="/de/junior-programme" component={JuniorProgramsDe} />
            <Route path="/de/teen-programme" component={TeenProgramsDe} />
            <Route path="/de/teen-programm" component={TeenProgramDe} />
            <Route path="/de/preise" component={PreiseDe} />
            <Route path="/de/oxford-english" component={OxfordEnglishDe} />
            <Route path="/de/sport-akademie" component={SportAkademieDe} />
            <Route path="/de/leadership" component={LeadershipDe} />
            <Route path="/de/teen-challenger" component={TeenChallengerDe} />

            {/* German home page - direct route BEFORE grouped routes */}
            <Route path="/de" component={HomePageDe} />
            <Route path="/de/" component={HomePageDe} />

            {/* French routes */}
            <Route path="/fr" component={HomePageFr} />
            <Route path="/fr/" component={HomePageFr} />
            <Route path="/fr/a-propos" component={AboutPageFr} />
            <Route path="/fr/tarifs-euroclub" component={EuroclubPricesFr} />
            <Route path="/fr/programme-junior" component={JuniorCampFr} />
            <Route path="/fr/programme-ado" component={TeenProgramFr} />
            <Route path="/fr/programmes" component={ProgramiFr} />
            <Route path="/fr/forfait-aventure" component={AdventurePackageFr} />
            <Route path="/fr/hebergement" component={AccommodationFr} />
            <Route path="/fr/questions-frequentes" component={FaqFr} />
            <Route path="/fr/reservation" component={ReservationPageFr} />
            <Route path="/fr/camp-sport" component={SportsFr} />
            <Route path="/fr/camp-anglais" component={OxfordEnglishFr} />
            <Route path="/fr/academie-numerique" component={DigitalAcademyFr} />
            <Route path="/fr/programme-journalier" component={DailyRoutineFr} />
            <Route path="/fr/arts-glamour" component={ArtFashionFr} />
            <Route path="/fr/leadership-business" component={LeadershipFr} />
            <Route path="/fr/animateur-junior" component={JuniorAnimatorFr} />
            <Route path="/fr/defi-ado" component={TeenChallengerFr} />
            <Route path="/fr/camp-croate" component={CroatianCampFr} />
            <Route path="/fr/camp-francais" component={FrenchCampFr} />
            <Route path="/fr/camp-allemand" component={GermanCampFr} />
            <Route path="/fr/camp-italien" component={ItalianCampFr} />
            <Route path="/fr/mer-soleil-plaisir" component={SeaSunFunFr} />
            <Route path="/fr/formulaire-enseignant" component={TeacherFormFr} />
            <Route path="/fr/junior-programs" component={JuniorProgramsFr} />
            <Route path="/fr/teen-programs" component={TeenProgramsFr} />
            {/* Legacy French aliases */}
            <Route path="/fr/about" component={AboutPageFr} />
            <Route path="/fr/about-us" component={AboutPageFr} />
            <Route path="/fr/faq" component={FaqFr} />
            <Route path="/fr/prices" component={EuroclubPricesFr} />
            <Route path="/fr/accommodation" component={AccommodationFr} />

            {/* Polish routes */}
            <Route path="/pl" component={HomePagePl} />
            <Route path="/pl/" component={HomePagePl} />
            <Route path="/pl/oboz-letni-dla-dzieci" component={JuniorCampPl} />
            <Route path="/pl/oboz-letni-mlodziezowy" component={TeenProgramPl} />
            <Route path="/pl/pakiet-przygoda" component={AdventurePackagePl} />
            <Route path="/pl/cennik" component={PricesPagePl} />
            <Route path="/pl/o-nas" component={AboutPagePl} />
            <Route path="/pl/dlaczego-euroclub" component={AboutPagePl} />
            <Route path="/pl/faq" component={FaqPagePl} />
            <Route path="/pl/zakwaterowanie" component={AccommodationPagePl} />
            <Route path="/pl/oxford-english" component={React.lazy(() => import("./pages/pl/oxford-english"))} />
            <Route path="/pl/sports" component={React.lazy(() => import("./pages/pl/sports"))} />
            <Route path="/pl/digital-academy" component={React.lazy(() => import("./pages/pl/digital-academy"))} />
            <Route path="/pl/art-fashion" component={React.lazy(() => import("./pages/pl/art-fashion"))} />
            <Route path="/pl/leadership" component={React.lazy(() => import("./pages/pl/leadership"))} />
            <Route path="/pl/junior-programs" component={React.lazy(() => import("./pages/pl/junior-programs"))} />
            <Route path="/pl/teen-programs" component={React.lazy(() => import("./pages/pl/teen-programs"))} />
            <Route path="/pl/harmonogram-dnia" component={HarmonogramDniaPl} />
            <Route path="/pl/teen-challenger" component={TeenChallengerPl} />

            {/* Language Camps Polish */}
            <Route path="/pl/croatian-camp" component={CroatianCampPl} />
            <Route path="/pl/kamp-hrvatskog-jezika" component={CroatianCampPl} />
            <Route path="/pl/french-camp" component={FrenchCampPl} />
            <Route path="/pl/kamp-francuskog-jezika" component={FrenchCampPl} />
            <Route path="/pl/german-camp" component={GermanCampPl} />
            <Route path="/pl/kamp-njemackog-jezika" component={GermanCampPl} />
            <Route path="/pl/italian-camp" component={ItalianCampPl} />
            <Route path="/pl/kamp-talijanskog-jezika" component={ItalianCampPl} />

            {/* Russian routes */}
            <Route path="/ru" component={HomePageRu} />
            <Route path="/ru/" component={HomePageRu} />
            <Route path="/ru/detskiy-lager" component={DetskiyLagerPageRu} />
            <Route path="/ru/molodezhniy-lager" component={MolodezhniyLagerPageRu} />
            <Route path="/ru/programmy" component={ProgrammyPageRu} />
            <Route path="/ru/tseny" component={TsenyPageRu} />
            <Route path="/ru/o-nas" component={ONasPageRu} />
            <Route path="/ru/chastye-voprosy" component={ChastyeVoprosyPageRu} />
            <Route path="/ru/faq" component={ChastyeVoprosyPageRu} />
            <Route path="/ru/razmeshcheniye" component={RazmeshcheniyePageRu} />
            <Route path="/ru/priklyucheniye" component={AdventurePaketRu} />
            <Route path="/ru/ezhednevnyy-rasporyadok" component={DnevniRasporedRu} />
            <Route path="/ru/raspisanie-dnya" component={DnevniRasporedRu} />
            <Route path="/ru/oksfordskiy-angliyskiy" component={OxfordEnglishRu} />
            <Route path="/ru/sport" component={SportsRu} />
            <Route path="/ru/tsifrovaya-akademiya" component={DigitalAcademyRu} />
            <Route path="/ru/iskusstvo-i-moda" component={ArtFashionRu} />
            <Route path="/ru/liderstvo" component={LeadershipRu} />
            <Route path="/ru/mladshiy-animator" component={JuniorAnimatorRu} />
            <Route path="/ru/lager-khorvatskogo-yazyka" component={KampHrvatskogJezikaRu} />
            <Route path="/ru/lager-italyanskogo-yazyka" component={KampTalijanskogJezikaRu} />
            <Route path="/ru/lager-nemetskogo-yazyka" component={KampNjemackogJezikaRu} />
            <Route path="/ru/lager-frantsuzskogo-yazyka" component={KampFrancuskogJezikaRu} />
            <Route path="/ru/detski-programmy" component={JuniorProgramsRu} />
            <Route path="/ru/detskie-programmy" component={JuniorProgramsRu} />
            <Route path="/ru/programmy-dlya-podrostkov" component={TeenProgramsRu} />
            <Route path="/ru/molodezhnye-programmy" component={TeenProgramsRu} />
            <Route path="/ru/teen-challenger" component={TeenChallengerRu} />
            <Route path="/ru/oksfordskiy-angliyskiy-dlya-podrostkov" component={OxfordEnglishTeenRu} />

            {/* Program aliases */}
            <Route path="/pl/oxford-english-teen" component={React.lazy(() => import("./pages/pl/oxford-english"))} />

            {/* Czech routes */}
            <CzechRoutes />

            {/* Croatian routes - last to avoid catch-all conflicts */}




            {/* Blog Routes - MOVED TO TOP */}
            {/* <Route path="/hr/blog" component={BlogIndex} /> */}
            {/* <Route path="/hr/blog/:slug" component={BlogPostPage} /> */}
            {/* <Route path="/blog" component={BlogIndex} /> */}
            {/* <Route path="/blog/:slug" component={BlogPostPage} /> */}

            {/* Legacy English routes are now handled via server-side 301 redirects */}

            {/* Fallback for old routes - will be redirected server-side */}

            {/* 404 page - catch-all for all languages */}
            <Route component={NotFoundPage} />
          </Switch>
        </Suspense>
      </div>
    </ErrorBoundary>
  );
}

function AppInner() {
  return (
    <>
      <Toaster />
      <CookieConsent />
      <ChatWidget />
      <Router />
      <AdminToolbar />
      <MobileContactFooter />
    </>
  );
}

export default function App() {
  useEffect(() => {
    // Update HTML lang attribute based on current language
    const currentLang = LanguageManager.getCurrentLanguage();
    const htmlElement = document.getElementById('html-root');
    if (htmlElement) {
      htmlElement.setAttribute('lang', currentLang);
    }
  }, []);

  return (
    <ErrorBoundary>
      <QueryClientProvider client={queryClient}>
        <TooltipProvider>
          <AppInner />
        </TooltipProvider>
      </QueryClientProvider>
    </ErrorBoundary>
  );
}