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 { suspend fun getChats(): List fun getChatsFlow(): Flow> // Flow для UI (простой список) fun getMessagesFlow(chatId: String): Flow> // Paging 3 для пагинированного списка fun getMessagesPaging(chatId: String): Flow> // Загрузка из сети (для начальной синхронизации) suspend fun getMessages(chatId: String, cursor: String? = null, pivot: Long? = null, afterSequenceId: Long? = null, limit: Int? = null): List // Получить последний известный sequenceId для чата (из локальной базы) suspend fun getLastKnownSequenceId(chatId: String): Int? suspend fun sendMessage( chatId: String, content: String?, type: String = "text", attachments: List? = null, replyToId: String? = null, forwardedFromId: String? = null ): Message 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 editLocalMessage(messageId: String, newContent: 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 }