import Foundation

final class MutableLocalNoticeEntryView: MutablePostboxView {
    private let key: NoticeEntryKey
    fileprivate var value: CodableEntry?

    init(postbox: PostboxImpl, key: NoticeEntryKey) {
        self.key = key
        self.value = postbox.noticeTable.get(key: key)
    }

    func replay(postbox: PostboxImpl, transaction: PostboxTransaction) -> Bool {
        var updated = false
        if transaction.updatedNoticeEntryKeys.contains(self.key) {
            self.value = postbox.noticeTable.get(key: key)
            updated = true
        }
        return updated
    }

    func refreshDueToExternalTransaction(postbox: PostboxImpl) -> Bool {
        return false
    }

    func immutableView() -> PostboxView {
        return LocalNoticeEntryView(self)
    }
}

public final class LocalNoticeEntryView: PostboxView {
    public let value: CodableEntry?

    init(_ view: MutableLocalNoticeEntryView) {
        self.value = view.value
    }
}