import { AddSongToPlaylist, ChatMessage, CreatePlaylist, CurrentQueue, CurrentSong, GetPlaylist, Join, ListenerList, Playlists, PlaylistSongs, GetOtherPlaylists, QueueSong, RemoveFromAutoPlay, RemovePlaylist, RemoveSongFromPlaylist, ReorderSong, SearchSong, SearchSongResult, SendChatMessage, Shuffle, SkipSong, SongLikes, StuenMessage, ToggleSongLike, ToggleTag, UnqueueSong, OthersPlaylists, } from "./messageTypes"; export default function parseMessage(message: string): StuenMessage | null { try { const data = JSON.parse(message); switch (data.type) { case 'Join': return new Join(data.name); case 'ListenerList': return new ListenerList(data.names); case 'SendChatMessage': return new SendChatMessage(data.message); case 'ChatMessage': return new ChatMessage(data.name, data.message); case 'SearchSong': return new SearchSong(data.query); case 'SearchSongResult': return new SearchSongResult(data.result); case 'QueueSong': return new QueueSong(data.song); case 'CurrentQueue': return new CurrentQueue(data.songs) case 'CurrentSong': return new CurrentSong(data.song); case 'UnqueueSong': return new UnqueueSong(data.position, data.all); case 'ReorderSong': return new ReorderSong(data.positionToMove, data.placePosition); case 'SkipSong': return new SkipSong(); case 'ToggleSongLike': return new ToggleSongLike(); case 'SongLikes': return new SongLikes(data.listeners); case 'Playlists': return new Playlists(data.playlists); case 'GetPlaylist': return new GetPlaylist(data.playlist); case 'PlaylistSongs': return new PlaylistSongs(data.playlist); case 'CreatePlaylist': return new CreatePlaylist(data.title); case 'RemovePlaylist': return new RemovePlaylist(data.title); case 'AddSongToPlaylist': return new AddSongToPlaylist(data.song, data.playlist); case 'RemoveSongFromPlaylist': return new RemoveSongFromPlaylist(data.song, data.playlist); case 'GetOtherPlaylists': return new GetOtherPlaylists(); case 'OthersPlaylists': return new OthersPlaylists(data.playlists); case 'ToggleTag': return new ToggleTag(data.song, data.tag); case 'Shuffle': return new Shuffle(); case 'RemoveFromAutoPlay': return new RemoveFromAutoPlay(); default: console.error('Unknown message type:', data.type); return null; } } catch (error) { console.error('Error parsing WebSocket message:', error); return null; // Handle parsing errors } }