Files
steipete--codexbar/Sources/CodexBarCore/Providers/Qoder/QoderUsageSnapshot.swift
T
2026-07-13 12:22:33 +08:00

61 lines
1.9 KiB
Swift

import Foundation
public struct QoderUsageSnapshot: Sendable {
public let usedCredits: Double
public let totalCredits: Double
public let remainingCredits: Double
public let usagePercentage: Double
public let unit: String?
public let resetsAt: Date?
public let updatedAt: Date
public init(
usedCredits: Double,
totalCredits: Double,
remainingCredits: Double,
usagePercentage: Double,
unit: String?,
resetsAt: Date? = nil,
updatedAt: Date = Date())
{
self.usedCredits = usedCredits
self.totalCredits = totalCredits
self.remainingCredits = remainingCredits
self.usagePercentage = usagePercentage
self.unit = unit
self.resetsAt = resetsAt
self.updatedAt = updatedAt
}
public func toUsageSnapshot() -> UsageSnapshot {
let creditSummary = "\(Self.formatCredits(self.usedCredits)) / \(Self.formatCredits(self.totalCredits)) credits"
let primary = RateWindow(
usedPercent: min(100, max(0, self.usagePercentage)),
windowMinutes: nil,
resetsAt: self.resetsAt,
resetDescription: creditSummary)
let identity = ProviderIdentitySnapshot(
providerID: .qoder,
accountEmail: nil,
accountOrganization: nil,
loginMethod: nil)
return UsageSnapshot(
primary: primary,
secondary: nil,
tertiary: nil,
providerCost: nil,
updatedAt: self.updatedAt,
identity: identity)
}
private static func formatCredits(_ value: Double) -> String {
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.locale = Locale(identifier: "en_US")
formatter.maximumFractionDigits = value.rounded() == value ? 0 : 2
return formatter.string(from: NSNumber(value: value)) ?? "\(value)"
}
}