import { useEffect, useState } from 'react'; import { socketService, DriverLocationUpdate } from '@services'; export function useOrderTracking(orderId: string, userJwtToken: string | null) { const [driverLocation, setDriverLocation] = useState(null); const [orderStatus, setOrderStatus] = useState(null); useEffect(() => { if (!orderId || !userJwtToken) { return; } console.log(`[useOrderTracking] Connecting socket for orderId: ${orderId}`); socketService.connect(userJwtToken); socketService.joinOrderTracking(orderId); const handleDriverLocationUpdate = (data: DriverLocationUpdate) => { console.log('[useOrderTracking] handleDriverLocationUpdate:', data); if (data.orderId === orderId) { setDriverLocation(data); } }; const handleOrderStatusUpdate = (data: any) => { if (data.orderId === orderId) { setOrderStatus(data.status); if (data.status === 'DELIVERED') { console.log( '[useOrderTracking] Order delivered. Disconnecting socket.', ); socketService.disconnect(orderId); } } }; socketService.onDriverLocationUpdate(handleDriverLocationUpdate); socketService.onOrderStatusUpdate(handleOrderStatusUpdate); return () => { console.log( `[useOrderTracking] Cleaning up tracking socket for orderId: ${orderId}`, ); socketService.disconnect(orderId); }; }, [orderId, userJwtToken]); return { driverLocation, orderStatus }; }