| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- // LoopFollow
- // AggregatedStatsViewModel.swift
- import Combine
- import Foundation
- class AggregatedStatsViewModel: ObservableObject {
- var simpleStats: SimpleStatsViewModel
- var agpStats: AGPViewModel
- var griStats: GRIViewModel
- var tirStats: TIRViewModel
- let dataService: StatsDataService
- @Published var dataAvailability: DataAvailabilityInfo?
- init(mainViewController: MainViewController?) {
- dataService = StatsDataService(mainViewController: mainViewController)
- simpleStats = SimpleStatsViewModel(dataService: dataService)
- agpStats = AGPViewModel(dataService: dataService)
- griStats = GRIViewModel(dataService: dataService)
- tirStats = TIRViewModel(dataService: dataService)
- }
- func calculateStats() {
- simpleStats.calculateStats()
- agpStats.calculateAGP()
- griStats.calculateGRI()
- tirStats.calculateTIR()
- dataAvailability = dataService.getDataAvailability()
- }
- func clearAllStats() {
- simpleStats.clearStats()
- agpStats.clearStats()
- griStats.clearStats()
- tirStats.clearStats()
- dataAvailability = nil
- }
- func updatePeriod(_ days: Int, completion: @escaping () -> Void = {}) {
- let endDate = Date()
- let startDate = dateTimeUtils.displayCalendar().date(byAdding: .day, value: -days, to: endDate) ?? endDate
- updateDateRange(start: startDate, end: endDate, completion: completion)
- }
- func updateDateRange(start: Date, end: Date, completion: @escaping () -> Void = {}) {
- dataService.updateDateRange(start: start, end: end)
- dataService.ensureDataAvailable(
- onProgress: {},
- completion: {
- self.calculateStats()
- completion()
- }
- )
- }
- var gmi: Double? { simpleStats.gmi }
- var avgGlucose: Double? { simpleStats.avgGlucose }
- var stdDeviation: Double? { simpleStats.stdDeviation }
- var coefficientOfVariation: Double? { simpleStats.coefficientOfVariation }
- var totalDailyDose: Double? { simpleStats.totalDailyDose }
- var programmedBasal: Double? { simpleStats.programmedBasal }
- var actualBasal: Double? { simpleStats.actualBasal }
- var avgBolus: Double? { simpleStats.avgBolus }
- var avgCarbs: Double? { simpleStats.avgCarbs }
- var agpData: [AGPDataPoint] { agpStats.agpData }
- var gri: Double? { griStats.gri }
- var griHypoComponent: Double? { griStats.griHypoComponent }
- var griHyperComponent: Double? { griStats.griHyperComponent }
- var griDataPoints: [(date: Date, value: Double)] { griStats.griDataPoints }
- }
|