PumpChangeCondition.swift 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. // LoopFollow
  2. // PumpChangeCondition.swift
  3. // Created by Jonas Björkert on 2025-05-17.
  4. //
  5. // PumpChangeCondition.swift
  6. // LoopFollow
  7. //
  8. // Created by Jonas Björkert on 2025-05-17.
  9. //
  10. import Foundation
  11. /// Fires once when we are **≤ threshold hours** away from the Omnipod /
  12. /// cannula 3-day hard-stop. Automatically disables itself after firing.
  13. struct PumpChangeCondition: AlarmCondition {
  14. static let type: AlarmType = .pumpChange
  15. init() {}
  16. /// Pod lifetime = 3 days = 72 h
  17. private let lifetime: TimeInterval = 3 * 24 * 60 * 60
  18. func evaluate(alarm: Alarm, data: AlarmData) -> Bool {
  19. // 0. sanity guards
  20. guard let warnAheadHrs = alarm.threshold, warnAheadHrs > 0 else { return false }
  21. guard let insertTS = data.pumpInsertTime else { return false }
  22. // convert UNIX timestamp → Date
  23. let insertedAt = Date(timeIntervalSince1970: insertTS)
  24. // 1. compute “fire-at” moment
  25. let expiry = insertedAt.addingTimeInterval(lifetime)
  26. let trigger = expiry.addingTimeInterval(-warnAheadHrs * 3600)
  27. // 2. nothing else to track – disableAfterFiring=true handles repeats
  28. return Date() >= trigger
  29. }
  30. }