import Foundation

final class MutableChatInterfaceStateView: MutablePostboxView {
    fileprivate let peerId: PeerId
    fileprivate var value: StoredPeerChatInterfaceState?
    
    init(postbox: PostboxImpl, peerId: PeerId) {
        self.peerId = peerId
        
        self.reload(postbox: postbox)
    }
    
    private func reload(postbox: PostboxImpl) {
        self.value = postbox.peerChatInterfaceStateTable.get(self.peerId)
    }
    
    func replay(postbox: PostboxImpl, transaction: PostboxTransaction) -> Bool {
        var updated = false
        
        if transaction.currentUpdatedPeerChatListEmbeddedStates.contains(self.peerId) {
            let previousValue = self.value
            self.reload(postbox: postbox)
            if previousValue != self.value {
                updated = true
            }
        }
        
        return updated
    }

    func refreshDueToExternalTransaction(postbox: PostboxImpl) -> Bool {
        self.reload(postbox: postbox)
        
        return true
    }
    
    func immutableView() -> PostboxView {
        return ChatInterfaceStateView(self)
    }
}

public final class ChatInterfaceStateView: PostboxView {
    public let value: StoredPeerChatInterfaceState?
    
    init(_ view: MutableChatInterfaceStateView) {
        self.value = view.value
    }
}