import AddOrganizationWizard from '@/components/add-organization/AddOrganizationWizard.tsx';
import { AdminLayout } from '@/components/admin/layout/AdminLayout.tsx';
import ProtectedRoute from '@/components/auth/ProtectedRoute.tsx';
import Chatbot from '@/components/chatbot/Chatbot.tsx';
import Spinner from '@/components/ui/Spinner.tsx';
import { useUI } from '@/hooks/useUI.ts';
import { NavigationProvider } from '@/providers/NavigationProvider.tsx';
import { AnimatePresence, motion } from 'framer-motion';
import React, { Suspense } from 'react';
import { Route, BrowserRouter as Router, Routes, useLocation } from 'react-router-dom';
// Performance: Lazily load page components to improve initial load time.
const LandingPage = React.lazy(() => import('../pages/LandingPage.tsx'));
const MapView = React.lazy(() => import('../pages/MapView.tsx'));
const OrganizationPage = React.lazy(() => import('@/pages/OrganizationPage.tsx'));
const OrganizationDashboardPage = React.lazy(() => import('@/pages/OrganizationDashboardPage.tsx'));
const AboutPage = React.lazy(() => import('../pages/AboutPage.tsx'));
const ContactPage = React.lazy(() => import('../pages/ContactPage.tsx'));
const PrivacyPage = React.lazy(() => import('../pages/PrivacyPage.tsx'));
const AdminDashboard = React.lazy(() => import('../pages/admin/AdminDashboard.tsx'));
const AdminOrganizationsPage = React.lazy(
() => import('../pages/admin/AdminOrganizationsPage.tsx')
);
const AdminOrganizationEditPage = React.lazy(
() => import('../pages/admin/AdminOrganizationEditPage.tsx')
);
const AdminVerificationQueuePage = React.lazy(
() => import('../pages/admin/AdminVerificationQueuePage.tsx')
);
const AdminOrganizationsAnalyticsPage = React.lazy(
() => import('../pages/admin/AdminOrganizationsAnalyticsPage.tsx')
);
const AdminSettingsMaintenancePage = React.lazy(
() => import('../pages/admin/AdminSettingsMaintenancePage.tsx')
);
// Existing admin pages (migrating to new structure)
const UsersListPage = React.lazy(() => import('../pages/admin/UsersListPage.tsx'));
const UserEditPage = React.lazy(() => import('../pages/admin/UserEditPage.tsx'));
const ContentPagesPage = React.lazy(() => import('../pages/admin/ContentPagesPage.tsx'));
const ContentPageEditPage = React.lazy(() => import('../pages/admin/ContentPageEditPage.tsx'));
const AnnouncementsPage = React.lazy(() => import('../pages/admin/AnnouncementsPage.tsx'));
const MediaLibraryPage = React.lazy(() => import('../pages/admin/MediaLibraryPage.tsx'));
const LocalizationUIPage = React.lazy(() => import('../pages/admin/LocalizationUIPage.tsx'));
const LocalizationDataPage = React.lazy(() => import('../pages/admin/LocalizationDataPage.tsx'));
const DashboardPage = React.lazy(() => import('../pages/DashboardPage.tsx'));
const AnalyticsDashboard = React.lazy(() => import('../pages/AnalyticsDashboard.tsx'));
const ImpactMetrics = React.lazy(() => import('../pages/ImpactMetrics.tsx'));
const SupplyDemandAnalysis = React.lazy(() => import('../pages/SupplyDemandAnalysis.tsx'));
const OrganizationsListPage = React.lazy(() => import('../pages/OrganizationsListPage.tsx'));
const OrganizationEditPage = React.lazy(() => import('../pages/OrganizationEditPage.tsx'));
const HeritagePage = React.lazy(() => import('../pages/HeritagePage.tsx'));
const HeritageBuildingPage = React.lazy(() => import('../pages/HeritageBuildingPage.tsx'));
const LoginPage = React.lazy(() => import('../pages/LoginPage.tsx'));
const SignupPage = React.lazy(() => import('../pages/SignupPage.tsx'));
const ResourceFlowsPage = React.lazy(() => import('../pages/ResourceFlowsPage.tsx'));
const ResourceFlowDetailPage = React.lazy(() => import('../pages/ResourceFlowDetailPage.tsx'));
const MatchingDashboard = React.lazy(() => import('../pages/MatchingDashboard.tsx'));
const MatchDetailPage = React.lazy(() => import('../pages/MatchDetailPage.tsx'));
const MatchNegotiationPage = React.lazy(() => import('../pages/MatchNegotiationPage.tsx'));
const MatchesMapView = React.lazy(() => import('../pages/MatchesMapView.tsx'));
const DiscoveryPage = React.lazy(() => import('../pages/DiscoveryPage.tsx'));
const CommunityNewsPage = React.lazy(() => import('../pages/CommunityNewsPage.tsx'));
const CommunityImpactPage = React.lazy(() => import('../pages/CommunityImpactPage.tsx'));
const CommunityStoriesPage = React.lazy(() => import('../pages/CommunityStoriesPage.tsx'));
const CommunityEventsPage = React.lazy(() => import('../pages/CommunityEventsPage.tsx'));
/**
* Wrapper component for admin pages that provides AdminLayout
*/
const AdminPageWrapper = ({
children,
title,
breadcrumbs,
}: {
children: React.ReactNode;
title?: string;
breadcrumbs?: Array<{ label: string; href?: string }>;
}) => (