'use client'; import React, { createContext, useContext, useEffect, useState } from 'react'; import { io, Socket } from 'socket.io-client'; import { File } from '@/types/file'; interface SocketContextType { socket: Socket | null; isConnected: boolean; onlineUsers: number; } const SocketContext = createContext({ socket: null, isConnected: false, onlineUsers: 0, }); export const useSocket = () => { const context = useContext(SocketContext); if (!context) { throw new Error('useSocket must be used within a SocketProvider'); } return context; }; interface SocketProviderProps { children: React.ReactNode; } export const SocketProvider: React.FC = ({ children }) => { const [socket, setSocket] = useState(null); const [isConnected, setIsConnected] = useState(false); const [onlineUsers, setOnlineUsers] = useState(0); useEffect(() => { const socketConnection = io(process.env.NEXT_PUBLIC_SOCKET_URL || 'http://localhost:3001', { transports: ['websocket', 'polling'], }); socketConnection.on('connect', () => { setIsConnected(true); console.log('Connected to WebSocket server'); }); socketConnection.on('disconnect', () => { setIsConnected(false); console.log('Disconnected from WebSocket server'); }); socketConnection.on('user:count', (count: number) => { setOnlineUsers(count); }); setSocket(socketConnection); return () => { socketConnection.disconnect(); }; }, []); const value: SocketContextType = { socket, isConnected, onlineUsers, }; return ( {children} ); };