import Foundation

final class MutableIsContactView: MutablePostboxView {
    fileprivate let id: PeerId
    fileprivate var isContact: Bool

    init(postbox: PostboxImpl, id: PeerId) {
        self.id = id
        self.isContact = postbox.contactsTable.isContact(peerId: self.id)
    }
    
    func replay(postbox: PostboxImpl, transaction: PostboxTransaction) -> Bool {
        var updated = false
        if transaction.replaceContactPeerIds != nil {
            let isContact = postbox.contactsTable.isContact(peerId: self.id)
            if self.isContact != isContact {
                self.isContact = isContact
                updated = true
            }
        }
        if updated {
            return true
        } else {
            return false
        }
    }

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

public final class IsContactView: PostboxView {
    public let isContact: Bool
    
    init(_ view: MutableIsContactView) {
        self.isContact = view.isContact
    }
}