forked from jbr7rr/MedtrumKit
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathDoseEntry.swift
More file actions
83 lines (76 loc) · 2.52 KB
/
DoseEntry.swift
File metadata and controls
83 lines (76 loc) · 2.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import Foundation
import LoopKit
public extension DoseEntry {
static func bolus(
units: Double,
deliveredUnits: Double,
duration: TimeInterval,
activationType: BolusActivationType,
insulinType: InsulinType?,
startDate: Date = Date.now
) -> DoseEntry {
DoseEntry(
type: .bolus,
startDate: startDate,
endDate: Date.now.addingTimeInterval(duration),
value: units,
unit: .units,
deliveredUnits: deliveredUnits,
insulinType: insulinType,
automatic: activationType.isAutomatic,
manuallyEntered: activationType == .manualNoRecommendation,
isMutable: false
)
}
static func tempBasal(
absoluteUnit: Double,
duration: TimeInterval,
insulinType: InsulinType?,
startDate: Date = Date.now,
endDate: Date? = nil
) -> DoseEntry {
if let endDate = endDate {
let duration = endDate.timeIntervalSince(startDate)
return DoseEntry(
type: .tempBasal,
startDate: startDate,
endDate: endDate,
value: absoluteUnit,
unit: .unitsPerHour,
deliveredUnits: roundBasalRate(absoluteUnit * (duration / .hours(1))),
insulinType: insulinType,
automatic: true,
isMutable: false
)
}
return DoseEntry(
type: .tempBasal,
startDate: startDate,
endDate: startDate + duration,
value: absoluteUnit,
unit: .unitsPerHour,
deliveredUnits: nil,
insulinType: insulinType,
automatic: true,
isMutable: true
)
}
static func basal(rate: Double, insulinType: InsulinType?, startDate: Date = Date.now) -> DoseEntry {
DoseEntry(
type: .basal,
startDate: startDate,
value: rate,
unit: .unitsPerHour,
insulinType: insulinType
)
}
static func resume(insulinType: InsulinType?, resumeDate: Date = Date.now) -> DoseEntry {
DoseEntry(resumeDate: resumeDate, insulinType: insulinType)
}
static func suspend(suspendDate: Date = Date.now) -> DoseEntry {
DoseEntry(suspendDate: suspendDate)
}
private static func roundBasalRate(_ rate: Double) -> Double {
MedtrumPumpManager.onboardingSupportedBasalRates.last(where: { $0 <= rate }) ?? 0
}
}