bookwiz.io / components / AnalyticsProvider.tsx
AnalyticsProvider.tsx
Raw
'use client'

import { createContext, useContext, useEffect, ReactNode, Suspense } from 'react'
import { usePathname, useSearchParams } from 'next/navigation'
import { initializeAnalytics, trackPageView, trackUsage } from '@/lib/analytics'

interface AnalyticsContextType {
  isInitialized: boolean
}

const AnalyticsContext = createContext<AnalyticsContextType>({
  isInitialized: false,
})

export const useAnalytics = () => {
  const context = useContext(AnalyticsContext)
  if (!context) {
    throw new Error('useAnalytics must be used within an AnalyticsProvider')
  }
  return context
}

interface AnalyticsProviderProps {
  children: ReactNode
}

function AnalyticsTracker() {
  const pathname = usePathname()
  const searchParams = useSearchParams()
  
  useEffect(() => {
    // Initialize analytics on mount
    if (typeof window !== 'undefined') {
      initializeAnalytics()
      trackUsage.sessionStart()
    }
  }, [])

  useEffect(() => {
    // Track page views on route changes
    if (typeof window !== 'undefined') {
      const url = `${pathname}${searchParams ? `?${searchParams}` : ''}`
      trackPageView(url)
    }
  }, [pathname, searchParams])

  return null
}

export function AnalyticsProvider({ children }: AnalyticsProviderProps) {
  return (
    <AnalyticsContext.Provider value={{ isInitialized: true }}>
      <Suspense fallback={null}>
        <AnalyticsTracker />
      </Suspense>
      {children}
    </AnalyticsContext.Provider>
  )
}