// // ResourcesServicePerformance.swift // Wallet // // Created by Igor on 09.03.2021. // Copyright © 2021 AM. All rights reserved. // import Foundation extension Resources.Service { class Performance: Common.Service.Provider { private var collection = [Resources.Model.Performance]() let account: String private(set) var refund: String? private(set) var refundTime: String? init(account: String) { self.account = account } subscript(_ kind: Resources.Model.Performance.Kind) -> Resources.Model.Performance { if let value = collection.filter({ $0.kind == kind }).first { return value } return .init(kind: kind) } func clear() { collection = [] refund = nil refundTime = nil } func fetch(_ completion: @escaping Completion.Network) { Network.accounts.account(account) { (account) in self.collection = [ .init( kind: .cpu, available: account?.cpuLimit.available, max: account?.cpuLimit.max, staked: account?.total.cpuWeight, stakedByMe: account?.delegated?.cpuWeight ), .init( kind: .net, available: account?.netLimit.available, max: account?.netLimit.max, staked: account?.total.netWeight, stakedByMe: account?.delegated?.netWeight ), .init( kind: .ram, available: (account?.ramQuota ?? 0) - (account?.ramUsage ?? 0), max: account?.ramQuota ) ] let refund = (account?.refund?.cpuAmount.amount.toDecimal() ?? 0) + (account?.refund?.netAmount.amount.toDecimal() ?? 0) self.refund = refund > 0 ? refund.toString(max: .eosioToken) : nil if var date = account?.refund?.date { date.addTimeInterval(Double(TimeZone.init(abbreviation: "UTC")!.secondsFromGMT()) + 3*24*3600) self.refundTime = date.timeIntervalSince1970 > Date().timeIntervalSince1970 ? Date().distance(to: date) : nil } else { self.refundTime = nil } completion(nil) } } } }