package chats.data.remote.signalr import chats.data.remote.dto.ChatDto import chats.data.remote.dto.MessageDto sealed class ChatEvent { data class NewMessage(val message: MessageDto) : ChatEvent() data class MessageEdited(val messageId: String, val chatId: String, val content: String) : ChatEvent() data class MessageDeleted(val messageId: String, val chatId: String) : ChatEvent() data class MessagesRead(val chatId: String, val userId: String, val lastReadSequenceId: Int) : ChatEvent() data class UserTyping(val chatId: String, val userId: String) : ChatEvent() data class UserStoppedTyping(val chatId: String, val userId: String) : ChatEvent() data class UserOnline(val userId: String) : ChatEvent() data class UserOffline(val userId: String, val lastSeen: String?) : ChatEvent() data class NewChat(val chat: ChatDto) : ChatEvent() data class ReactionUpdated(val messageId: String, val chatId: String, val userId: String, val emoji: String, val isRemoved: Boolean = false) : ChatEvent() data class MessagePinned(val chatId: String, val message: MessageDto) : ChatEvent() data class MessageUnpinned(val chatId: String, val messageId: String) : ChatEvent() // Call Events (WebRTC Signaling) data class CallIncoming(val chatId: String, val from: String, val offer: String, val callType: String) : ChatEvent() data class CallAnswered(val chatId: String, val answer: String) : ChatEvent() data class IceCandidateReceived(val chatId: String, val candidate: String) : ChatEvent() data class CallEnded(val chatId: String) : ChatEvent() // Group Call Events data class GroupCallIncoming(val chatId: String, val from: String, val callerInfo: Any) : ChatEvent() data class GroupCallParticipants(val chatId: String, val participants: List) : ChatEvent() data class GroupCallUserJoined(val chatId: String, val userId: String) : ChatEvent() data class GroupCallUserLeft(val chatId: String, val userId: String) : ChatEvent() data class GroupCallOffer(val chatId: String, val from: String, val offer: String) : ChatEvent() data class GroupCallAnswer(val chatId: String, val from: String, val answer: String) : ChatEvent() }