package com.example.myserver // MediaType теперь в отдельном файле, не нужно объявлять здесь data class MediaAttachment( val id: Long, val localPath: String, val remoteUrl: String? = null, val mediaType: MediaType, val mimeType: String, val fileSize: Long, val width: Int = 0, val height: Int = 0, val duration: Long = 0, val thumbnailPath: String? = null, val isUploaded: Boolean = false, val uploadProgress: Int = 0 ) enum class MessageStatus { PENDING, SENT, DELIVERED, READ, QUEUED, ERROR, EDITED } data class EncryptedDataUI( val cipherText: String, val iv: String, val authTag: String ) data class ChatMessage( val id: Long, val senderId: Long, val senderName: String, val recipientId: Long, val content: String, val timestamp: List, val status: MessageStatus = MessageStatus.PENDING, val read: Boolean = false, val deliveredAt: Long? = null, val readAt: Long? = null, val isEdited: Boolean = false, val isDeleted: Boolean = false, val originalContent: String? = null, val replyToMessageId: Long? = null, val forwardedFromId: Long? = null, val isSecret: Boolean = false, val encryptedData: EncryptedDataUI? = null, val attachments: List = emptyList(), val secretChatId: String? = null ) { fun hasMedia(): Boolean = attachments.isNotEmpty() fun isReply(): Boolean = replyToMessageId != null fun isForwarded(): Boolean = forwardedFromId != null fun getFormattedTime(): String { return if (timestamp.size >= 6) { "${timestamp[3].toString().padStart(2, '0')}:${timestamp[4].toString().padStart(2, '0')}" } else { "" } } fun getStatusIcon(): String { return when (status) { MessageStatus.PENDING, MessageStatus.QUEUED -> "⏳" MessageStatus.SENT -> "✓" MessageStatus.DELIVERED -> "✓✓" MessageStatus.READ -> "✓✓" MessageStatus.ERROR -> "❌" MessageStatus.EDITED -> "✏️" } } fun getStatusIconColor(): Int { return when (status) { MessageStatus.READ -> 0xFF4CAF50.toInt() MessageStatus.DELIVERED -> 0xFF2196F3.toInt() MessageStatus.SENT -> 0xFF888888.toInt() MessageStatus.PENDING, MessageStatus.QUEUED -> 0xFFFF9800.toInt() MessageStatus.ERROR -> 0xFFF44336.toInt() MessageStatus.EDITED -> 0xFF9C27B0.toInt() } } fun getDisplayContent(): String { return if (isDeleted) { "Сообщение удалено" } else { content } } }