DecimalPickerSettings.swift 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. import SwiftUI
  2. class PickerSettingsProvider: ObservableObject {
  3. static let shared = PickerSettingsProvider()
  4. var settings = DecimalPickerSettings()
  5. private init() {} // Private init to enforce singleton pattern
  6. // Helper function to generate values for the picker
  7. func generatePickerValues(from setting: PickerSetting, units: GlucoseUnits) -> [Decimal] {
  8. var values: [Decimal] = []
  9. var currentValue = setting.min
  10. while currentValue <= setting.max {
  11. values.append(currentValue)
  12. currentValue += setting.step
  13. }
  14. // Glucose values are stored as mg/dl values, so Integers.
  15. // Filter out odd numbers to avoid duplicate mmol/L values due to rounding.
  16. if units == .mmolL, setting.type == PickerSetting.PickerSettingType.glucose {
  17. values = values.filter { Int($0) % 2 == 0 }
  18. }
  19. return values
  20. }
  21. }
  22. struct DecimalPickerSettings {
  23. var lowGlucose = PickerSetting(value: 72, step: 1, min: 40, max: 100, type: PickerSetting.PickerSettingType.glucose)
  24. var highGlucose = PickerSetting(value: 270, step: 1, min: 100, max: 500, type: PickerSetting.PickerSettingType.glucose)
  25. var carbsRequiredThreshold = PickerSetting(value: 10, step: 1, min: 0, max: 100, type: PickerSetting.PickerSettingType.gramms)
  26. var individualAdjustmentFactor = PickerSetting(
  27. value: 0.5,
  28. step: 0.05,
  29. min: 0.1,
  30. max: 2,
  31. type: PickerSetting.PickerSettingType.factor
  32. )
  33. var high = PickerSetting(value: 180, step: 1, min: 100, max: 500, type: PickerSetting.PickerSettingType.glucose)
  34. var low = PickerSetting(value: 70, step: 1, min: 40, max: 100, type: PickerSetting.PickerSettingType.glucose)
  35. var maxCarbs = PickerSetting(value: 250, step: 5, min: 0, max: 300, type: PickerSetting.PickerSettingType.gramms)
  36. var maxFat = PickerSetting(value: 250, step: 5, min: 0, max: 300, type: PickerSetting.PickerSettingType.gramms)
  37. var maxProtein = PickerSetting(value: 250, step: 5, min: 0, max: 300, type: PickerSetting.PickerSettingType.gramms)
  38. var overrideFactor = PickerSetting(value: 0.8, step: 0.05, min: 0.5, max: 1.5, type: PickerSetting.PickerSettingType.factor)
  39. var fattyMealFactor = PickerSetting(value: 0.7, step: 0.05, min: 0.5, max: 2, type: PickerSetting.PickerSettingType.factor)
  40. var sweetMealFactor = PickerSetting(value: 2, step: 0.05, min: 1, max: 3, type: PickerSetting.PickerSettingType.factor)
  41. var maxIOB = PickerSetting(value: 0, step: 1, min: 0, max: 20, type: PickerSetting.PickerSettingType.insulinUnit)
  42. var maxDailySafetyMultiplier = PickerSetting(
  43. value: 3,
  44. step: 0.1,
  45. min: 1,
  46. max: 5,
  47. type: PickerSetting.PickerSettingType.factor
  48. )
  49. var currentBasalSafetyMultiplier = PickerSetting(
  50. value: 4,
  51. step: 0.1,
  52. min: 1,
  53. max: 5,
  54. type: PickerSetting.PickerSettingType.factor
  55. )
  56. var autosensMax = PickerSetting(value: 1.2, step: 0.1, min: 0.5, max: 2, type: PickerSetting.PickerSettingType.factor)
  57. var autosensMin = PickerSetting(value: 0.7, step: 0.1, min: 0.5, max: 1, type: PickerSetting.PickerSettingType.factor)
  58. var smbDeliveryRatio = PickerSetting(value: 0.5, step: 0.05, min: 0.3, max: 0.7, type: PickerSetting.PickerSettingType.factor)
  59. var halfBasalExerciseTarget = PickerSetting(
  60. value: 160,
  61. step: 1,
  62. min: 100,
  63. max: 200,
  64. type: PickerSetting.PickerSettingType.glucose
  65. )
  66. var maxCOB = PickerSetting(value: 120, step: 5, min: 0, max: 300, type: PickerSetting.PickerSettingType.gramms)
  67. var min5mCarbimpact = PickerSetting(value: 8, step: 1, min: 0, max: 20, type: PickerSetting.PickerSettingType.gramms)
  68. var autotuneISFAdjustmentFraction = PickerSetting(
  69. value: 1.0,
  70. step: 0.05,
  71. min: 0,
  72. max: 1,
  73. type: PickerSetting.PickerSettingType.factor
  74. )
  75. var remainingCarbsFraction = PickerSetting(
  76. value: 1.0,
  77. step: 0.05,
  78. min: 0.5,
  79. max: 1,
  80. type: PickerSetting.PickerSettingType.factor
  81. )
  82. var remainingCarbsCap = PickerSetting(value: 90, step: 5, min: 0, max: 200, type: PickerSetting.PickerSettingType.gramms)
  83. var maxSMBBasalMinutes = PickerSetting(value: 30, step: 5, min: 30, max: 180, type: PickerSetting.PickerSettingType.minute)
  84. var maxUAMSMBBasalMinutes = PickerSetting(value: 30, step: 5, min: 30, max: 180, type: PickerSetting.PickerSettingType.minute)
  85. var smbInterval = PickerSetting(value: 3, step: 1, min: 1, max: 10, type: PickerSetting.PickerSettingType.minute)
  86. var bolusIncrement = PickerSetting(
  87. value: 0.1,
  88. step: 0.05,
  89. min: 0.05,
  90. max: 1,
  91. type: PickerSetting.PickerSettingType.insulinUnit
  92. )
  93. var insulinPeakTime = PickerSetting(value: 75, step: 5, min: 35, max: 120, type: PickerSetting.PickerSettingType.minute)
  94. var carbsReqThreshold = PickerSetting(value: 1.0, step: 0.1, min: 0, max: 10, type: PickerSetting.PickerSettingType.gramms)
  95. var noisyCGMTargetMultiplier = PickerSetting(
  96. value: 1.3,
  97. step: 0.05,
  98. min: 1,
  99. max: 2,
  100. type: PickerSetting.PickerSettingType.factor
  101. )
  102. var maxDeltaBGthreshold = PickerSetting(
  103. value: 0.2,
  104. step: 0.05,
  105. min: 0.1,
  106. max: 2,
  107. type: PickerSetting.PickerSettingType.factor
  108. )
  109. var adjustmentFactor = PickerSetting(value: 0.8, step: 0.1, min: 0.5, max: 1.5, type: PickerSetting.PickerSettingType.factor)
  110. var adjustmentFactorSigmoid = PickerSetting(
  111. value: 0.5,
  112. step: 0.1,
  113. min: 0.5,
  114. max: 2,
  115. type: PickerSetting.PickerSettingType.factor
  116. )
  117. var weightPercentage = PickerSetting(value: 0.65, step: 0.1, min: 0.1, max: 1, type: PickerSetting.PickerSettingType.factor)
  118. var enableSMB_high_bg_target = PickerSetting(
  119. value: 110,
  120. step: 1,
  121. min: 70,
  122. max: 200,
  123. type: PickerSetting.PickerSettingType.glucose
  124. )
  125. var threshold_setting = PickerSetting(value: 60, step: 1, min: 60, max: 120, type: PickerSetting.PickerSettingType.glucose)
  126. var updateInterval = PickerSetting(value: 20, step: 5, min: 1, max: 60, type: PickerSetting.PickerSettingType.minute)
  127. var delay = PickerSetting(value: 20, step: 5, min: 5, max: 60, type: PickerSetting.PickerSettingType.minute)
  128. var minuteInterval = PickerSetting(value: 20, step: 5, min: 5, max: 60, type: PickerSetting.PickerSettingType.minute)
  129. var timeCap = PickerSetting(value: 20, step: 5, min: 5, max: 60, type: PickerSetting.PickerSettingType.hour)
  130. var hours = PickerSetting(value: 6, step: 0.5, min: 2, max: 24, type: PickerSetting.PickerSettingType.hour)
  131. var dia = PickerSetting(value: 6, step: 0.5, min: 4, max: 10, type: PickerSetting.PickerSettingType.hour)
  132. var maxBolus = PickerSetting(value: 10, step: 0.5, min: 1, max: 30, type: PickerSetting.PickerSettingType.insulinUnit)
  133. var maxBasal = PickerSetting(value: 10, step: 0.5, min: 1, max: 30, type: PickerSetting.PickerSettingType.insulinUnit)
  134. }
  135. struct PickerSetting {
  136. var value: Decimal
  137. var step: Decimal
  138. var min: Decimal
  139. var max: Decimal
  140. var type: PickerSettingType
  141. enum PickerSettingType {
  142. case glucose
  143. case factor
  144. case gramms
  145. case insulinUnit
  146. case minute
  147. case hour
  148. }
  149. }