package chats.domain.repository import androidx.paging.PagingData import chats.domain.model.Chat import chats.domain.model.Message import kotlinx.coroutines.flow.Flow interface ChatRepository { // Чаты fun getChatsFlow(): Flow> suspend fun getChats(): List suspend fun syncChats() // Сообщения - Single Source of Truth через Flow fun getMessagesFlow(chatId: String): Flow> fun getMessagesPagingSource(chatId: String): Flow> suspend fun getMessages(chatId: String, cursor: String? = null, pivot: Long? = null, limit: Int? = null): List // Отправка сообщений с поддержкой офлайн suspend fun sendMessage( chatId: String, content: String?, type: String = "text", attachments: List? = null, replyToId: String? = null, forwardedFromId: String? = null ): Message suspend fun retryFailedMessage(localId: String) suspend fun syncMessagesForChat(chatId: String) suspend fun schedulePeriodicSync() // Реакции suspend fun addReaction(messageId: String, emoji: String) suspend fun sendTypingStatus(chatId: String) suspend fun markMessagesAsRead(chatId: String, lastMessageId: String, lastReadSequenceId: Int) // Локальное хранение suspend fun saveMessage(message: Message) suspend fun deleteLocalMessage(messageId: String) // Медиа suspend fun uploadMedia(file: java.io.File): String suspend fun getTrendingGifs(page: Int = 0): List suspend fun searchGifs(query: String, page: Int = 0): List suspend fun getGifCategories(): List // Управление чатами suspend fun createPersonalChat(userId: String): Chat suspend fun deleteMessage(messageId: String, forEveryone: Boolean) suspend fun editMessage(messageId: String, content: String): Message }