// // ResourcesModelPerformance.swift // Wallet // // Created by Igor on 09.03.2021. // Copyright © 2021 AM. All rights reserved. // import Foundation extension Resources.Model { struct Performance { enum Kind: String { case cpu case net case ram } let kind: Kind let available: Int let max: Int let staked: String let stakedByMe: String let stakedByOthers: String let divider: Decimal init( kind: Kind, available: Int? = nil, max: Int? = nil, staked: String? = nil, stakedByMe: String? = nil ) { self.kind = kind self.available = available ?? 0 self.max = max ?? 0 self.staked = staked ?? Decimal(0).toString(max: .eosioToken) self.stakedByMe = stakedByMe ?? Decimal(0).toString(max: .eosioToken) let subtract = (staked?.amount.toDecimal() ?? 0) - self.stakedByMe.amount.toDecimal() self.stakedByOthers = ((subtract > 0) ? subtract : 0).toString(max: .eosioToken) self.divider = kind == .cpu ? 1000 : 1024 } } } extension Resources.Model.Performance { var availableProgress: Double { Double(available) / Double(max == 0 ? 1 : max) } var availableProgressString: String { "\(Int(availableProgress*100))%" } var availableString: String { L10n.Resources.Performance.available( (Decimal(available) / divider).roundDown(to: 2).toString(max: 2, group: false, symbol: kind.unit), (Decimal(max) / divider).roundDown(to: 2).toString(max: 2, group: false, symbol: kind.unit), availableProgressString ) } var availableKbString: String { L10n.Resources.Performance.Available.kb( (Decimal(available) / divider).roundDown(to: 2).toString(max: 2, group: false, symbol: kind.unit) ) } var used: Int { max - available } var usedProgress: Double { 1 - availableProgress } var usedProgressString: String { "\(Int(usedProgress*100))%" } var usedString: String { L10n.Resources.Performance.used( (Decimal(used) / divider).roundDown(to: 2).toString(max: 2, group: false), (Decimal(max) / divider).roundDown(to: 2).toString(max: 2, group: false), kind.unit ) } var avaliableStr: String { L10n.Resources.Performance.used2( (Decimal(available) / divider).roundDown(to: 2).toString(max: 2, group: false), kind.unit ) } var maxStr: String { L10n.Resources.Performance.used2( (Decimal(max) / divider).roundDown(to: 2).toString(max: 2, group: false), kind.unit ) } } extension Resources.Model.Performance.Kind { var unit: String { self == .cpu ? L10n.Resources.Performance.Unit.ms : L10n.Resources.Performance.Unit.kb } var prefix: String { "resources.performance.kind.\(rawValue).prefix".localized } var name: String { "resources.performance.kind.\(rawValue).name".localized } var title: String { prefix.isEmpty ? name : "\(prefix) (\(name))" } }