import { useEffect, useState, useRef } from 'react'; import io from 'socket.io-client'; export function useWhatsappSocket() { const [socket, setSocket] = useState(null); const [qrCode, setQrCode] = useState(null); const [status, setStatus] = useState('DISCONNECTED'); const [incomingMessage, setIncomingMessage] = useState(null); const [presenceUpdate, setPresenceUpdate] = useState(null); const socketRef = useRef(null); useEffect(() => { if (socketRef.current) return; // Conectar ao namespace /whatsapp const newSocket = io('http://localhost:3001/whatsapp', { reconnectionAttempts: 5, }); socketRef.current = newSocket; setSocket(newSocket); newSocket.on('connect', () => { console.log('Conectado ao WebSocket do WhatsApp'); // Fetch status atual fetch('http://localhost:3001/whatsapp/status') .then(res => res.json()) .then(data => setStatus(data.status)) .catch(console.error); }); newSocket.on('qr', (qr) => { setQrCode(qr); setStatus('AWAITING_QR'); }); newSocket.on('status', (newStatus) => { setStatus(newStatus); }); newSocket.on('message', (message) => { console.log('Nova mensagem recebida:', message); setIncomingMessage(message); }); newSocket.on('presence', (presence) => { console.log('Atualização de presença:', presence); setPresenceUpdate(presence); }); return () => { newSocket.disconnect(); socketRef.current = null; }; }, []); return { socket, qrCode, status, incomingMessage, presenceUpdate, clearIncomingMessage: () => setIncomingMessage(null), clearPresenceUpdate: () => setPresenceUpdate(null) }; }