import Foundation

final class PendingPeerNotificationSettingsIndexTable: Table {
    static func tableSpec(_ id: Int32) -> ValueBoxTable {
        return ValueBoxTable(id: id, keyType: .int64, compactValuesOnCreation: false)
    }
    
    private let sharedKey = ValueBoxKey(length: 8)
    private var updatedPeerIds: [PeerId: Bool] = [:]
    
    private func key(_ id: PeerId) -> ValueBoxKey {
        self.sharedKey.setInt64(0, value: id.toInt64())
        return self.sharedKey
    }
    
    private func get(peerId: PeerId) -> Bool {
        if let _ = self.valueBox.get(self.table, key: self.key(peerId)) {
            return true
        } else {
            return false
        }
    }
    
    func getAll() -> [PeerId] {
        var peerIds: [PeerId] = []
        self.valueBox.scanInt64(self.table, values: { key, _ in
            peerIds.append(PeerId(key))
            return true
        })
        return peerIds
    }
    
    func set(peerId: PeerId, pending: Bool) {
        if pending {
            self.valueBox.set(self.table, key: self.key(peerId), value: MemoryBuffer())
        } else {
            self.valueBox.remove(self.table, key: self.key(peerId), secure: false)
        }
    }
}