105 lines · 3.8 KB · Swift
RawDownload
import Foundation public struct OpenCodeGoUsageSnapshot: Sendable {    public let hasMonthlyUsage: Bool    public let rollingUsagePercent: Double    public let weeklyUsagePercent: Double    public let monthlyUsagePercent: Double    public let rollingResetInSec: Int    public let weeklyResetInSec: Int    public let monthlyResetInSec: Int    public let zenBalanceUSD: Double?    public let renewsAt: Date?    public let updatedAt: Date     public init(        hasMonthlyUsage: Bool,        rollingUsagePercent: Double,        weeklyUsagePercent: Double,        monthlyUsagePercent: Double,        rollingResetInSec: Int,        weeklyResetInSec: Int,        monthlyResetInSec: Int,        zenBalanceUSD: Double? = nil,        renewsAt: Date? = nil,        updatedAt: Date)    {        self.hasMonthlyUsage = hasMonthlyUsage        self.rollingUsagePercent = rollingUsagePercent        self.weeklyUsagePercent = weeklyUsagePercent        self.monthlyUsagePercent = monthlyUsagePercent        self.rollingResetInSec = rollingResetInSec        self.weeklyResetInSec = weeklyResetInSec        self.monthlyResetInSec = monthlyResetInSec        self.zenBalanceUSD = zenBalanceUSD        self.renewsAt = renewsAt        self.updatedAt = updatedAt    }     public func toUsageSnapshot() -> UsageSnapshot {        let rollingReset = self.updatedAt.addingTimeInterval(TimeInterval(self.rollingResetInSec))        let weeklyReset = self.updatedAt.addingTimeInterval(TimeInterval(self.weeklyResetInSec))         let primary = RateWindow(            usedPercent: self.rollingUsagePercent,            windowMinutes: 5 * 60,            resetsAt: rollingReset,            resetDescription: nil)        let secondary = RateWindow(            usedPercent: self.weeklyUsagePercent,            windowMinutes: 7 * 24 * 60,            resetsAt: weeklyReset,            resetDescription: nil)        let tertiary: RateWindow?        if self.hasMonthlyUsage {            let monthlyReset = self.updatedAt.addingTimeInterval(TimeInterval(self.monthlyResetInSec))            tertiary = RateWindow(                usedPercent: self.monthlyUsagePercent,                windowMinutes: 30 * 24 * 60,                resetsAt: monthlyReset,                resetDescription: nil)        } else {            tertiary = nil        }         var extraWindows: [NamedRateWindow]?        if let renewsAt = self.renewsAt {            let renewalWindow = RateWindow(                usedPercent: 0,                windowMinutes: nil,                resetsAt: renewsAt,                resetDescription: nil)            extraWindows = [NamedRateWindow(id: "renewal", title: "Renews", window: renewalWindow)]        }         return UsageSnapshot(            primary: primary,            secondary: secondary,            tertiary: tertiary,            extraRateWindows: extraWindows,            providerCost: self.zenBalanceUSD.map {                ProviderCostSnapshot(                    used: $0,                    limit: 0,                    currencyCode: "USD",                    period: "Zen balance",                    updatedAt: self.updatedAt)            },            updatedAt: self.updatedAt,            identity: nil)    }     public func withZenBalanceUSD(_ balance: Double?) -> OpenCodeGoUsageSnapshot {        OpenCodeGoUsageSnapshot(            hasMonthlyUsage: self.hasMonthlyUsage,            rollingUsagePercent: self.rollingUsagePercent,            weeklyUsagePercent: self.weeklyUsagePercent,            monthlyUsagePercent: self.monthlyUsagePercent,            rollingResetInSec: self.rollingResetInSec,            weeklyResetInSec: self.weeklyResetInSec,            monthlyResetInSec: self.monthlyResetInSec,            zenBalanceUSD: balance,            renewsAt: self.renewsAt,            updatedAt: self.updatedAt)    }}