package chats.data.repository import chats.data.remote.api.ChatApi import chats.data.remote.dto.ChatDto import chats.data.remote.dto.MessageDto import chats.domain.model.Chat import chats.domain.model.Message import chats.domain.model.MediaType import chats.domain.repository.ChatRepository import javax.inject.Inject class ChatRepositoryImpl @Inject constructor( private val api: ChatApi ) : ChatRepository { override suspend fun getChats(): List { return api.getChats().map { it.toDomain() } } override suspend fun getMessages(chatId: String): List { return api.getMessages(chatId).map { it.toDomain() } } override suspend fun sendMessage(chatId: String, content: String): Message { return api.sendMessage(chatId, content).toDomain() } override suspend fun addReaction(messageId: String, emoji: String) { api.addReaction(messageId, emoji) } override suspend fun sendTypingStatus(chatId: String) { api.sendTypingStatus(chatId) } override suspend fun markMessagesAsRead(chatId: String, lastMessageId: String) { api.markMessagesAsRead(chatId, lastMessageId) } } // Mappers fun ChatDto.toDomain(): Chat = Chat( id = id, type = type, name = name ?: "Unknown Chat", avatar = null, // Update if avatar is added to ChatDto unreadCount = unreadCount, lastMessage = messages.firstOrNull()?.toDomain() ) fun MessageDto.toDomain(): Message = Message( id = id, chatId = chatId, senderId = senderId, senderName = sender.displayName, content = content, sequenceId = sequenceId, createdAt = createdAt, media = media.map { it.url }, mediaUrl = media.firstOrNull()?.url, mediaType = when (media.firstOrNull()?.type) { "image" -> MediaType.IMAGE "video" -> MediaType.VIDEO "audio" -> MediaType.AUDIO "file" -> MediaType.FILE else -> MediaType.TEXT } )