import Postbox

public struct AccountBackupData: Codable, Equatable {
    public var masterDatacenterId: Int32
    public var peerId: Int64
    public var masterDatacenterKey: Data
    public var masterDatacenterKeyId: Int64

    public init(masterDatacenterId: Int32, peerId: Int64, masterDatacenterKey: Data, masterDatacenterKeyId: Int64) {
    	self.masterDatacenterId = masterDatacenterId
    	self.peerId = peerId
    	self.masterDatacenterKey = masterDatacenterKey
    	self.masterDatacenterKeyId = masterDatacenterKeyId
    }
}

public final class AccountBackupDataAttribute: AccountRecordAttribute, Equatable {
    public let data: AccountBackupData?
    
    public init(data: AccountBackupData?) {
        self.data = data
    }
    
    public init(decoder: PostboxDecoder) {
        self.data = try? JSONDecoder().decode(AccountBackupData.self, from: decoder.decodeDataForKey("data") ?? Data())
    }
    
    public func encode(_ encoder: PostboxEncoder) {
        if let data = self.data, let serializedData = try? JSONEncoder().encode(data) {
            encoder.encodeData(serializedData, forKey: "data")
        }
    }
    
    public static func ==(lhs: AccountBackupDataAttribute, rhs: AccountBackupDataAttribute) -> Bool {
        return lhs.data == rhs.data
    }
    
    public func isEqual(to: AccountRecordAttribute) -> Bool {
        if let to = to as? AccountBackupDataAttribute {
            return self == to
        } else {
            return false
        }
    }
}