import Foundation

final class MutablePeerChatInclusionView: MutablePostboxView {
    private let peerId: PeerId
    fileprivate var inclusion: Bool
    
    init(postbox: PostboxImpl, peerId: PeerId) {
        self.peerId = peerId
        
        self.inclusion = postbox.chatListIndexTable.get(peerId: self.peerId).includedIndex(peerId: peerId) != nil
    }
    
    func replay(postbox: PostboxImpl, transaction: PostboxTransaction) -> Bool {
        var updated = false
        if transaction.currentUpdatedChatListInclusions[self.peerId] != nil {
            let inclusion = postbox.chatListIndexTable.get(peerId: self.peerId).includedIndex(peerId: self.peerId) != nil
            if self.inclusion != inclusion {
                self.inclusion = inclusion
                updated = true
            }
        }
        
        return updated
    }

    func refreshDueToExternalTransaction(postbox: PostboxImpl) -> Bool {
        return false
    }
    
    func immutableView() -> PostboxView {
        return PeerChatInclusionView(self)
    }
}

public final class PeerChatInclusionView: PostboxView {
    public let inclusion: Bool
    
    init(_ view: MutablePeerChatInclusionView) {
        self.inclusion = view.inclusion
    }
}