Files
raspberry/iOS/Wallet/Sources/Resources/Model/ResourcesModelPerformance.swift
2022-11-17 12:16:19 +03:00

112 lines
3.7 KiB
Swift

//
// 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 {
private var availableDividedAndRounded: Double {
let available = (Decimal(available) / divider).roundDown(to: 2)
return available.doubleValue
}
private var maxDividedAndRounded: Double {
let max = (Decimal(max) / divider).roundDown(to: 2)
return max.doubleValue
}
private var usedDividedAndRounded: Double {
return self.maxDividedAndRounded - self.availableDividedAndRounded
}
var availableStr: String {
L10n.Resources.Performance.used2(
self.availableDividedAndRounded.toString(max: 2, min: 2, group: false),
kind.unit
)
}
var availableKbString: String {
L10n.Resources.Performance.Available.kb(
self.availableDividedAndRounded.toString(max: 2, min: 2, group: false, symbol: kind.unit)
)
}
var maxStr: String {
L10n.Resources.Performance.used2(
self.maxDividedAndRounded.toString(max: 2, min: 2, group: false),
kind.unit
)
}
var availableTitle: String {
L10n.Resources.Performance.available(
self.availableDividedAndRounded.toString(max: 2, min: 2, group: false, symbol: kind.unit),
self.maxDividedAndRounded.toString(max: 2, min: 2, group: false, symbol: kind.unit),
self.availableProgress.withPercentage
)
}
var usedTitle: String {
L10n.Resources.Performance.used(
self.usedDividedAndRounded.toString(max: 2, min: 2, group: false),
self.maxDividedAndRounded.toString(max: 2, min: 2, group: false),
kind.unit
)
}
var availableProgress: Double {
let safeMax = self.maxDividedAndRounded == 0 ? 1 : self.maxDividedAndRounded
return self.availableDividedAndRounded / safeMax
}
var usedProgress: Double {
let safeMax = self.maxDividedAndRounded == 0 ? 1 : self.maxDividedAndRounded
return self.usedDividedAndRounded / safeMax
}
var usedPercentageProgress: String { self.usedProgress.withPercentage }
}
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))" }
}