2026-05-18 17:34:23 -03:00
|
|
|
import { useEffect, useState, useRef } from 'react';
|
|
|
|
|
import io from 'socket.io-client';
|
2026-05-19 09:27:02 -03:00
|
|
|
import { API_BASE_URL, WHATSAPP_SOCKET_URL } from '../services/apiConfig';
|
2026-05-18 17:34:23 -03:00
|
|
|
|
|
|
|
|
export function useWhatsappSocket() {
|
|
|
|
|
const [socket, setSocket] = useState(null);
|
|
|
|
|
const [qrCode, setQrCode] = useState(null);
|
|
|
|
|
const [status, setStatus] = useState('DISCONNECTED');
|
|
|
|
|
const [incomingMessage, setIncomingMessage] = useState(null);
|
|
|
|
|
const socketRef = useRef(null);
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
if (socketRef.current) return;
|
|
|
|
|
|
|
|
|
|
// Conectar ao namespace /whatsapp
|
2026-05-19 09:27:02 -03:00
|
|
|
const newSocket = io(WHATSAPP_SOCKET_URL, {
|
2026-05-18 17:34:23 -03:00
|
|
|
reconnectionAttempts: 5,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
socketRef.current = newSocket;
|
|
|
|
|
setSocket(newSocket);
|
|
|
|
|
|
|
|
|
|
newSocket.on('connect', () => {
|
|
|
|
|
console.log('Conectado ao WebSocket do WhatsApp');
|
|
|
|
|
// Fetch status atual
|
2026-05-19 09:27:02 -03:00
|
|
|
fetch(`${API_BASE_URL}/whatsapp/status`)
|
2026-05-18 17:34:23 -03:00
|
|
|
.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);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return () => {
|
|
|
|
|
newSocket.disconnect();
|
|
|
|
|
socketRef.current = null;
|
|
|
|
|
};
|
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
socket,
|
|
|
|
|
qrCode,
|
|
|
|
|
status,
|
|
|
|
|
incomingMessage,
|
|
|
|
|
clearIncomingMessage: () => setIncomingMessage(null),
|
|
|
|
|
};
|
|
|
|
|
}
|