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;