import {
BrowserRouter,
Routes,
Route,
Navigate,
useLocation
} from "react-router-dom";
import React, { useEffect } from "react";
import { AnimatePresence } from "framer-motion";
import { NotFound } from "./components/ui/not-found-2";
import useTicketStore from "./store/ticketStore";
import Toaster from "./components/shared/Toaster";
import BugReportWidget from "./components/shared/BugReportWidget";
import useRealtimeNotifications from "./hooks/useRealtimeNotifications";
// Auth Components
import Login from "./pages/Login";
import ForgotPassword from "./pages/ForgotPassword";
import ResetPassword from "./pages/ResetPassword";
import Signup from "./pages/Signup";
import AdminSignup from "./pages/AdminSignup";
import AdminLobby from "./pages/AdminLobby";
import UserLobby from "./pages/UserLobby";
import LandingPage from "./pages/LandingPage";
import ContactSales from "./pages/ContactSales";
// Legacy components
import DuplicateDetection from "./user/pages/DuplicateDetection";
import AutoResolveChat from "./user/pages/AutoResolveChat";
import Resolved from "./user/pages/Resolved";
import TicketTracking from "./user/pages/TicketTracking";
// Layouts
import UserLayout from "./user/UserLayout";
import AdminLayout from "./admin/layout/AdminLayout";
// User Pages
import Dashboard from "./user/pages/Dashboard";
import CreateTicket from "./user/pages/CreateTicket";
import MyTickets from "./user/pages/MyTickets";
import TicketResult from "./user/pages/TicketResult";
import Profile from "./user/pages/Profile";
import TicketDetail from "./user/pages/TicketDetail";
import TicketProcessing from "./user/pages/AIProcessing"; // Renamed generic import just in case, but keeping AIProcessing
import AIProcessing from "./user/pages/AIProcessing";
import AIUnderstanding from "./user/pages/AIUnderstanding";
import Notifications from "./user/pages/Notifications";
import Help from "./user/pages/Help";
import DocsPortal from "./docs/pages/DocsPortal";
// New Showcase Pages
import ApiReference from "./pages/ApiReference";
import Changelog from "./pages/Changelog";
import StatusPage from "./pages/StatusPage";
import AboutUs from "./pages/AboutUs";
import Careers from "./pages/Careers";
import CookiePolicy from "./pages/legal/CookiePolicy";
// NEW Admin Pages (Refactored)
import AdminDashboard from "./admin/pages/AdminDashboard";
import AdminTickets from "./admin/pages/AdminTickets";
import AdminTicketDetail from "./admin/pages/AdminTicketDetail";
import AdminUsers from "./admin/pages/AdminUsers";
import AdminAnalytics from "./admin/pages/AdminAnalytics";
import AdminProfile from "./admin/pages/AdminProfile";
import AdminSettings from "./admin/pages/AdminSettings";
import MasterBugReports from "./master-admin/pages/MasterBugReports";
// Feature Pages
import AutoCategorizationFeature from "./pages/features/AutoCategorizationFeature";
import PriorityDetectionFeature from "./pages/features/PriorityDetectionFeature";
import SmartResolutionFeature from "./pages/features/SmartResolutionFeature";
// Legal Pages
import TermsOfService from "./pages/legal/TermsOfService";
import PrivacyPolicy from "./pages/legal/PrivacyPolicy";
import Security from "./pages/legal/Security";
import AdminProtectedRoute from "./components/shared/AdminProtectedRoute";
import MasterAdminProtectedRoute from "./components/shared/MasterAdminProtectedRoute";
import ProtectedRoute from "./components/shared/ProtectedRoute";
import useAuthStore from "./store/authStore";
import NotApproved from "./pages/NotApproved";
// Master Admin Components
import MasterAdminLogin from "./pages/MasterAdminLogin";
import MasterAdminLayout from "./master-admin/layout/MasterAdminLayout";
import MasterAdminDashboard from "./master-admin/pages/MasterAdminDashboard";
import PendingAdminRequests from "./master-admin/pages/PendingAdminRequests";
import AllCompanies from "./master-admin/pages/AllCompanies";
import AllAdmins from "./master-admin/pages/AllAdmins";
function TitleUpdater() {
const location = useLocation();
useEffect(() => {
const path = location.pathname;
let title = 'HELPDESK.AI';
// Admin Routes
if (path.startsWith('/admin/ticket/')) title = 'Ticket Detail | Admin';
else if (path.startsWith('/admin/dashboard')) title = 'Admin Dashboard';
else if (path.startsWith('/admin/tickets')) title = 'Admin Tickets';
else if (path.startsWith('/admin/users')) title = 'Manage Users | Admin';
else if (path.startsWith('/admin/analytics')) title = 'Analytics | Admin';
else if (path.startsWith('/admin/profile')) title = 'Admin Profile';
else if (path.startsWith('/admin/settings')) title = 'Settings | Admin';
// Master Admin Routes
else if (path.startsWith('/master-admin/dashboard')) title = 'Master Dashboard';
else if (path.startsWith('/master-admin/admin-requests')) title = 'Pending Requests | Master Admin';
else if (path.startsWith('/master-admin/companies')) title = 'Companies | Master Admin';
else if (path.startsWith('/master-admin/all-admins')) title = 'All Admins | Master Admin';
else if (path.startsWith('/master-admin/bug-reports')) title = 'System Bug Radar | Master Admin';
// User Routes
else if (path.startsWith('/ticket/')) title = 'Ticket Detail';
else if (path.startsWith('/ai-understanding')) title = 'AI Understanding';
else if (path.startsWith('/ai-processing')) title = 'AI Processing';
else if (path === '/dashboard') title = 'User Dashboard';
else if (path === '/create-ticket') title = 'Create Ticket';
else if (path === '/my-tickets') title = 'My Tickets';
else if (path === '/profile') title = 'User Profile';
else if (path === '/notifications') title = 'Notifications';
else if (path === '/docs') title = 'Documentation';
else if (path === '/api-reference') title = 'API Reference';
else if (path === '/changelog') title = 'Changelog';
else if (path === '/status') title = 'Status';
else if (path === '/about') title = 'About Us';
else if (path === '/careers') title = 'Careers';
else if (path === '/cookie-policy') title = 'Cookie Policy';
// Public / Lobby Routes
else if (path === '/login') title = 'Login';
else if (path === '/signup') title = 'Create Account';
else if (path === '/admin-signup') title = 'Admin Signup';
else if (path === '/user-lobby') title = 'User Lobby';
else if (path === '/admin-lobby') title = 'Admin Lobby';
else if (path === '/') title = 'Welcome';
document.title = title === 'HELPDESK.AI' ? title : `${title} | HELPDESK.AI`;
}, [location]);
return null;
}
// Scrolls to top on every route change
function ScrollToTop() {
const { pathname } = useLocation();
useEffect(() => {
window.scrollTo({ top: 0, behavior: 'instant' });
}, [pathname]);
return null;
}
function AppLayout() {
const { user, profile } = useAuthStore();
// Initialize Global Realtime Notifications Listener
useRealtimeNotifications();
useEffect(() => {
if (!user) return;
const handleFocus = () => {
useTicketStore.persist.rehydrate();
};
window.addEventListener('focus', handleFocus);
return () => window.removeEventListener('focus', handleFocus);
}, [user]);
// ProtectedRoute handles the redirect to /login if user is not present
// but we still need to handle role-based navigation here
return (
<>
} />
} />
} />
{/* --- User Portal --- */}
:
(profile?.role === 'admin' || profile?.role === 'super_admin') ? :
profile?.status === 'pending_approval' ? :
profile?.status === 'rejected' ? :
}>
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
{/* --- Admin Portal (Protected) --- */}
}>
}>
} />
} />
} />
} />
} />
} />
} />
} />
} />
>
);
}
function App() {
const { initialize } = useAuthStore();
useEffect(() => {
initialize();
}, [initialize]);
const isDocsSubdomain = window.location.hostname.startsWith('docs.');
if (isDocsSubdomain) {
return (
} />
} />
} />
} />
} />
} />
);
}
return (
{/* Public */}
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
{/* Feature Pages */}
} />
} />
} />
{/* Legal Pages */}
} />
} />
} />
{/* Master Admin Portal */}
} />
}>
}>
} />
} />
} />
} />
} />
{/* Protected */}
}>
} />
);
}
export default App;