import Foundation

final class MutableMessageView {
    let messageId: MessageId
    var stableId: UInt32?
    var message: Message?
    
    init(messageId: MessageId, message: Message?) {
        self.messageId = messageId
        self.message = message
        self.stableId = message?.stableId
    }
    
    func replay(postbox: PostboxImpl, operations: [MessageHistoryOperation], updatedMedia: [MediaId: Media?]) -> Bool {
        var updated = false
        for operation in operations {
            switch operation {
                case let .Remove(indices):
                    if let message = self.message {
                        let messageIndex = message.index
                        for (index, _) in indices {
                            if index == messageIndex {
                                self.message = nil
                                updated = true
                                break
                            }
                        }
                    }
                case let .InsertMessage(message):
                    if message.id == self.messageId || message.stableId == self.stableId {
                        self.message = postbox.renderIntermediateMessage(message)
                        self.stableId = message.stableId
                        updated = true
                    }
                case .UpdateEmbeddedMedia:
                    break
                case .UpdateTimestamp:
                    break
                default:
                    break
            }
        }
        return updated
    }
}

public final class MessageView {
    public let messageId: MessageId
    public let message: Message?
    
    init(_ view: MutableMessageView) {
        self.messageId = view.messageId
        self.message = view.message
    }
}