import { pool } from '../lib/database.js'; const connectedUsers = new Map(); export function initializeSocketIO(io) { io.on('connection', (socket) => { console.log('Usuario conectado:', socket.id); socket.on('register', (userId) => { connectedUsers.set(userId.toString(), socket.id); console.log(`Usuario ${userId} registrado con socket ${socket.id}`); socket.emit('registered', { userId, socketId: socket.id }); }); socket.on('join_conversation', (conversacionId) => { socket.join(`conversation_${conversacionId}`); console.log(`Socket ${socket.id} se unió a conversation_${conversacionId}`); }); socket.on('send_message', async (data) => { const { conversacionId, remitenteId, contenido } = data; try { const result = await pool.query( 'INSERT INTO mensajes (id_conversacion, id_remitente, contenido) VALUES ($1, $2, $3) RETURNING *', [conversacionId, remitenteId, contenido] ); const nuevoMensaje = result.rows[0]; const userResult = await pool.query( 'SELECT id_usuario, nombre, apellido_pa, apellido_ma FROM usuarios WHERE id_usuario = $1', [remitenteId] ); const mensajeCompleto = { ...nuevoMensaje, nombre: userResult.rows[0].nombre, apellido_pa: userResult.rows[0].apellido_pa, apellido_ma: userResult.rows[0].apellido_ma }; await pool.query( 'UPDATE conversaciones SET ultima_actualizacion = CURRENT_TIMESTAMP WHERE id_conversacion = $1', [conversacionId] ); io.to(`conversation_${conversacionId}`).emit('receive_message', mensajeCompleto); } catch (error) { console.error('Error al enviar mensaje:', error); socket.emit('error', { message: 'Error al enviar mensaje' }); } }); socket.on('typing', (data) => { const { conversacionId, userId, userName } = data; socket.to(`conversation_${conversacionId}`).emit('user_typing', { userId, userName }); }); socket.on('stop_typing', (data) => { const { conversacionId, userId } = data; socket.to(`conversation_${conversacionId}`).emit('user_stop_typing', { userId }); }); socket.on('disconnect', () => { for (let [userId, socketId] of connectedUsers.entries()) { if (socketId === socket.id) { connectedUsers.delete(userId); console.log(`Usuario ${userId} desconectado`); break; } } console.log('Usuario desconectado:', socket.id); }); }); } export { connectedUsers };