import { v4 as uuidv4 } from 'uuid'; let messages = []; let searchQueue = []; let users = []; let currentChats = []; export const getMessages = (toId, fromId) => { const userChats = currentChats.filter(chat => chat.includes(toId) && chat.includes(fromId)); if (userChats.length === 0) { fromId = ''; } const userMessages = messages.filter(message => message.to = toId && ["system", fromId].includes(message.from)); messages = messages.filter(message => message.to === toId && ["system", fromId].includes(message.from)); return userMessages; }; export const addMessage = (from, to, text) => { const userChats = currentChats.filter(chat => chat.includes(from) && chat.includes(to)); if (userChats.length === 0) { return; } messages.push({ from: from, to: to, text: text }); return { text: text }; }; export const findMatch = (genders, age, id) => { const currentUsersChat = currentChats.filter(chat => chat.includes(id)); if (currentUsersChat.length > 0) { return findUser(currentUsersChat[0][0] === id ? currentUsersChat[0][1] : currentUsersChat[0][0]); } let filteredSearchQueue = users.filter(user => searchQueue.some(sq => sq.id === user.id) && user.id !== id && currentChats.filter(chat => chat.includes(user.id)).length === 0 ).sort(() => Math.random() - 0.5); for (let i = 0; i < filteredSearchQueue.length; i++) { const user = filteredSearchQueue[i]; const ageMatch = user.age >= age.min && user.age <= age.max; const genderMatch = genders.includes(user.gender); if (ageMatch && genderMatch) { for (let j = searchQueue.length - 1; j >= 0; j--) { if ([id, user.id].includes(searchQueue[j].id)) { searchQueue.splice(j, 1); } } currentChats.push([user.id, id]); return user; } } if (!searchQueue.find(user => user.id === id)) { searchQueue.push({ id, genders, age }); } return null; }; const findUser = (id) => { return users.find(user => user.id === id); }; export const registerUser = (gender, age) => { const id = uuidv4(); users.push({ gender, age, id }); return id; }; export const removeUser = (id) => { searchQueue = searchQueue.filter(user => user.id !== id); users = users.filter(user => user.id !== id); currentChats = currentChats.filter(pair => pair[0] === id || pair[1] === id); messages = messages.filter(message => message.from === id || message.to === id); }; export const endChat = (userId) => { currentChats = currentChats.filter(chat => !chat.includes(userId)); messages.push({ to: userId, from: 'system', activity: 'otheruserleft'}) }