import type { ReactNode } from 'react'
import { Navigate, Route, Routes } from 'react-router-dom'
import { AppLayout } from '@/layouts/AppLayout'
import { LoginPage } from '@/pages/auth/LoginPage'
import { DashboardPage } from '@/pages/dashboard/DashboardPage'
import { OrdersPage } from '@/pages/orders/OrdersPage'
import { CreateOrderPage } from '@/pages/orders/CreateOrderPage'
import { OrderDetailPage } from '@/pages/orders/OrderDetailPage'
import { PrescriptionsPage } from '@/pages/prescriptions/PrescriptionsPage'
import { CreatePrescriptionPage } from '@/pages/prescriptions/CreatePrescriptionPage'
import { PrescriptionDetailPage } from '@/pages/prescriptions/PrescriptionDetailPage'
import { StockPage } from '@/pages/stock/StockPage'
import { CreateStockPage } from '@/pages/stock/CreateStockPage'
import { StockDetailPage } from '@/pages/stock/StockDetailPage'
import { ProcurementPage } from '@/pages/procurement/ProcurementPage'
import { CreateProcurementRequestPage } from '@/pages/procurement/CreateProcurementRequestPage'
import { ProcurementDetailPage } from '@/pages/procurement/ProcurementDetailPage'
import { FinancePage } from '@/pages/finance/FinancePage'
import { PaymentGatewaysPage } from '@/pages/finance/PaymentGatewaysPage'
import { SettlementDetailPage } from '@/pages/finance/SettlementDetailPage'
import { OrganisationsPage } from '@/pages/organisations/OrganisationsPage'
import { CreateOrganisationPage } from '@/pages/organisations/CreateOrganisationPage'
import { OrganisationDetailPage } from '@/pages/organisations/OrganisationDetailPage'
import { DoctorsPage } from '@/pages/doctors/DoctorsPage'
import { CreateDoctorPage } from '@/pages/doctors/CreateDoctorPage'
import { DoctorDetailPage } from '@/pages/doctors/DoctorDetailPage'
import { MarketingPage } from '@/pages/marketing/MarketingPage'
import { CrmPage } from '@/pages/marketing/CrmPage'
import { CustomerDetailPage } from '@/pages/marketing/CustomerDetailPage'
import { LoyaltyPage } from '@/pages/marketing/LoyaltyPage'
import { CampaignsPage } from '@/pages/marketing/CampaignsPage'
import { CampaignDetailPage } from '@/pages/marketing/CampaignDetailPage'
import { SegmentDetailPage } from '@/pages/marketing/SegmentDetailPage'
import { DispatchPage } from '@/pages/dispatch/DispatchPage'
import { RiderDetailPage } from '@/pages/dispatch/RiderDetailPage'
import { TeamPage } from '@/pages/team/TeamPage'
import { CreateTeamMemberPage } from '@/pages/team/CreateTeamMemberPage'
import { TeamMemberDetailPage } from '@/pages/team/TeamMemberDetailPage'
import { AuditPage } from '@/pages/audit/AuditPage'
import { AuditEventDetailPage } from '@/pages/audit/AuditEventDetailPage'
import { FaqPage } from '@/pages/faq/FaqPage'
import { FaqDetailPage } from '@/pages/faq/FaqDetailPage'
import { SettingsPage } from '@/pages/settings/SettingsPage'
import { BranchDetailPage } from '@/pages/settings/BranchDetailPage'
import { MigrationsPage } from '@/pages/migrations/MigrationsPage'
import { MigrationJobDetailPage } from '@/pages/migrations/MigrationJobDetailPage'
import { AnalyticsPage } from '@/pages/analytics/AnalyticsPage'
import { ProfilePage } from '@/pages/profile/ProfilePage'
import { PosPage } from '@/pages/pos/PosPage'
import { ItemsPage } from '@/pages/items/ItemsPage'
import { CreateItemPage } from '@/pages/items/CreateItemPage'
import { ItemDetailPage } from '@/pages/items/ItemDetailPage'
import { useAuthStore } from '@/zustand/authStore'
import { canAccess } from '@/config/permissions'
import type { ModuleKey } from '@/types'
function Guard({ module, children }: { module: ModuleKey; children: ReactNode }) {
const user = useAuthStore((s) => s.user)
if (!user) return
if (!canAccess(user.role, module)) return
return children
}
export function AppRoutes() {
return (
} />
}>
} />
{/* Available to every signed-in role — not a permission-gated module. */}
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
)
}