import { lazy, Suspense } from 'react'
import { createBrowserRouter } from 'react-router-dom'
import App from './App'
import { PageSkeleton, CrmSkeleton } from './components/Skeleton'

const Home = lazy(() => import('./pages/Home'))
const About = lazy(() => import('./pages/About'))
const Services = lazy(() => import('./pages/Services'))
const Indications = lazy(() => import('./pages/Indications'))
const Special = lazy(() => import('./pages/Special'))
const Contacts = lazy(() => import('./pages/Contacts'))
const Booking = lazy(() => import('./pages/Booking'))
const Shop = lazy(() => import('./pages/Shop'))
const Telemed = lazy(() => import('./pages/Telemed'))
const Blog = lazy(() => import('./pages/Blog'))
const License = lazy(() => import('./pages/License'))
const Privacy = lazy(() => import('./pages/Privacy'))
const Consent = lazy(() => import('./pages/Consent'))
const Insurance = lazy(() => import('./pages/Insurance'))
const FAQ = lazy(() => import('./pages/FAQ'))
const Reviews = lazy(() => import('./pages/Reviews'))
const Gallery = lazy(() => import('./pages/Gallery'))
const Calculator = lazy(() => import('./pages/Calculator'))
const Certificates = lazy(() => import('./pages/Certificates'))
const MapPage = lazy(() => import('./pages/MapPage'))
const Specialists = lazy(() => import('./pages/OurDoctors'))
const Contraindications = lazy(() => import('./pages/Contraindications'))
const Prices = lazy(() => import('./pages/Prices'))
const Articles = lazy(() => import('./pages/Articles'))
const SocialPage = lazy(() => import('./pages/SocialPage'))
const SocialAIPage = lazy(() => import('./pages/SocialAIPage'))
const TelegramSetupPage = lazy(() => import('./pages/TelegramSetupPage'))
const SocialPublishPage = lazy(() => import('./pages/SocialPublishPage'))
const AboutMethod = lazy(() => import('./pages/AboutMethod'))
const Methods = lazy(() => import('./pages/Methods'))
const TreatmentProcess = lazy(() => import('./pages/TreatmentProcess'))
const Myths = lazy(() => import('./pages/Myths'))
const Scientific = lazy(() => import('./pages/Scientific'))
const OzoneNews = lazy(() => import('./pages/OzoneNews'))
const AIAudit = lazy(() => import('./pages/AIAudit'))
const AIContentOptimizer = lazy(() => import('./pages/AIContentOptimizer'))
const AIContentStudio = lazy(() => import('./pages/AIContentStudio'))
const NotFound = lazy(() => import('./pages/NotFound'))
const OfflinePage = lazy(() => import('./pages/OfflinePage'))

// CRM
const CrmLayout = lazy(() => import('./components/crm/CrmLayout'))
const DoctorDashboard = lazy(() => import('./pages/DoctorDashboard'))
const PatientList = lazy(() => import('./pages/PatientList'))
const PatientCard = lazy(() => import('./pages/PatientCard'))
const NewPatient = lazy(() => import('./pages/NewPatient'))
const NewRecord = lazy(() => import('./pages/NewRecord'))
const Protocols = lazy(() => import('./pages/Protocols'))
const DoctorNotes = lazy(() => import('./pages/DoctorNotes'))
const DoctorLogin = lazy(() => import('./pages/DoctorLogin'))
const ResearchCabinet = lazy(() => import('./pages/ResearchCabinet'))

function SuspenseWrapper({ children, crm }: { children: React.ReactNode; crm?: boolean }) {
  return (
    <Suspense fallback={crm ? <CrmSkeleton /> : <PageSkeleton />}>
      {children}
    </Suspense>
  )
}

export const router = createBrowserRouter([
  {
    element: <App />,
    children: [
      { path: '/', element: <SuspenseWrapper><Home /></SuspenseWrapper> },
      { path: '/about', element: <SuspenseWrapper><About /></SuspenseWrapper> },
      { path: '/services', element: <SuspenseWrapper><Services /></SuspenseWrapper> },
      { path: '/indications', element: <SuspenseWrapper><Indications /></SuspenseWrapper> },
      { path: '/special', element: <SuspenseWrapper><Special /></SuspenseWrapper> },
      { path: '/contacts', element: <SuspenseWrapper><Contacts /></SuspenseWrapper> },
      { path: '/booking', element: <SuspenseWrapper><Booking /></SuspenseWrapper> },
      { path: '/shop', element: <SuspenseWrapper><Shop /></SuspenseWrapper> },
      { path: '/telemed', element: <SuspenseWrapper><Telemed /></SuspenseWrapper> },
      { path: '/blog', element: <SuspenseWrapper><Blog /></SuspenseWrapper> },
      { path: '/license', element: <SuspenseWrapper><License /></SuspenseWrapper> },
      { path: '/privacy', element: <SuspenseWrapper><Privacy /></SuspenseWrapper> },
      { path: '/consent', element: <SuspenseWrapper><Consent /></SuspenseWrapper> },
      { path: '/insurance', element: <SuspenseWrapper><Insurance /></SuspenseWrapper> },
      { path: '/faq', element: <SuspenseWrapper><FAQ /></SuspenseWrapper> },
      { path: '/team', element: <SuspenseWrapper><Specialists /></SuspenseWrapper> },
      { path: '/reviews', element: <SuspenseWrapper><Reviews /></SuspenseWrapper> },
      { path: '/gallery', element: <SuspenseWrapper><Gallery /></SuspenseWrapper> },
      { path: '/calculator', element: <SuspenseWrapper><Calculator /></SuspenseWrapper> },
      { path: '/certificates', element: <SuspenseWrapper><Certificates /></SuspenseWrapper> },
      { path: '/contraindications', element: <SuspenseWrapper><Contraindications /></SuspenseWrapper> },
      { path: '/prices', element: <SuspenseWrapper><Prices /></SuspenseWrapper> },
      { path: '/articles', element: <SuspenseWrapper><Articles /></SuspenseWrapper> },
      { path: '/map', element: <SuspenseWrapper><MapPage /></SuspenseWrapper> },
      { path: '/specialists', element: <SuspenseWrapper><Specialists /></SuspenseWrapper> },
      { path: '/social', element: <SuspenseWrapper><SocialPage /></SuspenseWrapper> },
      { path: '/social/:social', element: <SuspenseWrapper><SocialPage /></SuspenseWrapper> },
      { path: '/social/ai', element: <SuspenseWrapper><SocialAIPage /></SuspenseWrapper> },
      { path: '/social/telegram-setup', element: <SuspenseWrapper><TelegramSetupPage /></SuspenseWrapper> },
      { path: '/social/publish', element: <SuspenseWrapper><SocialPublishPage /></SuspenseWrapper> },
      { path: '/about-method', element: <SuspenseWrapper><AboutMethod /></SuspenseWrapper> },
      { path: '/methods', element: <SuspenseWrapper><Methods /></SuspenseWrapper> },
      { path: '/treatment-process', element: <SuspenseWrapper><TreatmentProcess /></SuspenseWrapper> },
      { path: '/myths', element: <SuspenseWrapper><Myths /></SuspenseWrapper> },
      { path: '/scientific', element: <SuspenseWrapper><Scientific /></SuspenseWrapper> },
      { path: '/ozone-news', element: <SuspenseWrapper><OzoneNews /></SuspenseWrapper> },
      { path: '/ai-audit', element: <SuspenseWrapper><AIAudit /></SuspenseWrapper> },
      { path: '/ai-content-optimizer', element: <SuspenseWrapper><AIContentOptimizer /></SuspenseWrapper> },
      { path: '/ai-content-studio', element: <SuspenseWrapper><AIContentStudio /></SuspenseWrapper> },
      { path: '/offline', element: <SuspenseWrapper><OfflinePage /></SuspenseWrapper> },
      { path: '*', element: <SuspenseWrapper><NotFound /></SuspenseWrapper> },
      // CRM — страница входа (без защиты)
      { path: '/crm/login', element: <SuspenseWrapper><DoctorLogin /></SuspenseWrapper> },
      // CRM — защищённые маршруты
      {
        path: '/crm',
        element: (
          <SuspenseWrapper crm><CrmLayout /></SuspenseWrapper>
        ),
        children: [
          { index: true, element: <DoctorDashboard /> },
          { path: 'patients', element: <PatientList /> },
          { path: 'patients/new', element: <NewPatient /> },
          { path: 'patients/:id', element: <PatientCard /> },
          { path: 'patients/:id/records/new', element: <NewRecord /> },
          { path: 'protocols', element: <Protocols /> },
          { path: 'notes', element: <DoctorNotes /> },
          { path: 'research', element: <ResearchCabinet /> },
        ],
      },
    ],
  },
])
