DecimalPickerSettings.swift 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  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) -> [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. return values
  15. }
  16. }
  17. struct DecimalPickerSettings {
  18. var lowGlucose = PickerSetting(value: 72, step: 1, min: 40, max: 400, type: PickerSetting.PickerSettingType.glucose)
  19. var highGlucose = PickerSetting(value: 270, step: 1, min: 100, max: 500, type: PickerSetting.PickerSettingType.glucose)
  20. var carbsRequiredThreshold = PickerSetting(value: 10, step: 1, min: 0, max: 100, type: PickerSetting.PickerSettingType.gramms)
  21. var individualAdjustmentFactor = PickerSetting(
  22. value: 0.5,
  23. step: 0.1,
  24. min: 0.1,
  25. max: 2,
  26. type: PickerSetting.PickerSettingType.factor
  27. )
  28. var high = PickerSetting(value: 180, step: 1, min: 70, max: 400, type: PickerSetting.PickerSettingType.glucose)
  29. var low = PickerSetting(value: 70, step: 1, min: 40, max: 100, type: PickerSetting.PickerSettingType.glucose)
  30. var maxCarbs = PickerSetting(value: 250, step: 5, min: 0, max: 500, type: PickerSetting.PickerSettingType.gramms)
  31. var maxFat = PickerSetting(value: 250, step: 5, min: 0, max: 500, type: PickerSetting.PickerSettingType.gramms)
  32. var maxProtein = PickerSetting(value: 250, step: 5, min: 0, max: 500, type: PickerSetting.PickerSettingType.gramms)
  33. var overrideFactor = PickerSetting(value: 0.8, step: 0.1, min: 0.5, max: 1.5, type: PickerSetting.PickerSettingType.factor)
  34. var fattyMealFactor = PickerSetting(value: 0.7, step: 0.1, min: 0.5, max: 2, type: PickerSetting.PickerSettingType.factor)
  35. var sweetMealFactor = PickerSetting(value: 2, step: 0.1, min: 1, max: 5, type: PickerSetting.PickerSettingType.factor)
  36. var maxIOB = PickerSetting(value: 0, step: 0.1, min: 0, max: 20, type: PickerSetting.PickerSettingType.insulinUnit)
  37. var maxDailySafetyMultiplier = PickerSetting(
  38. value: 3,
  39. step: 0.1,
  40. min: 1,
  41. max: 5,
  42. type: PickerSetting.PickerSettingType.factor
  43. )
  44. var currentBasalSafetyMultiplier = PickerSetting(
  45. value: 4,
  46. step: 0.1,
  47. min: 1,
  48. max: 5,
  49. type: PickerSetting.PickerSettingType.factor
  50. )
  51. var autosensMax = PickerSetting(value: 1.2, step: 0.1, min: 0.5, max: 2, type: PickerSetting.PickerSettingType.factor)
  52. var autosensMin = PickerSetting(value: 0.7, step: 0.1, min: 0.5, max: 1, type: PickerSetting.PickerSettingType.factor)
  53. var smbDeliveryRatio = PickerSetting(value: 0.5, step: 0.1, min: 0.1, max: 1, type: PickerSetting.PickerSettingType.factor)
  54. var halfBasalExerciseTarget = PickerSetting(
  55. value: 160,
  56. step: 1,
  57. min: 100,
  58. max: 200,
  59. type: PickerSetting.PickerSettingType.glucose
  60. )
  61. var maxCOB = PickerSetting(value: 120, step: 5, min: 0, max: 300, type: PickerSetting.PickerSettingType.gramms)
  62. var min5mCarbimpact = PickerSetting(value: 8, step: 1, min: 0, max: 20, type: PickerSetting.PickerSettingType.gramms)
  63. var autotuneISFAdjustmentFraction = PickerSetting(
  64. value: 1.0,
  65. step: 0.1,
  66. min: 0.5,
  67. max: 2,
  68. type: PickerSetting.PickerSettingType.factor
  69. )
  70. var remainingCarbsFraction = PickerSetting(
  71. value: 1.0,
  72. step: 0.1,
  73. min: 0.5,
  74. max: 2,
  75. type: PickerSetting.PickerSettingType.factor
  76. )
  77. var remainingCarbsCap = PickerSetting(value: 90, step: 5, min: 0, max: 200, type: PickerSetting.PickerSettingType.gramms)
  78. var maxSMBBasalMinutes = PickerSetting(value: 30, step: 1, min: 0, max: 60, type: PickerSetting.PickerSettingType.minute)
  79. var maxUAMSMBBasalMinutes = PickerSetting(value: 30, step: 1, min: 0, max: 60, type: PickerSetting.PickerSettingType.minute)
  80. var smbInterval = PickerSetting(value: 3, step: 0.1, min: 0.5, max: 10, type: PickerSetting.PickerSettingType.minute)
  81. var bolusIncrement = PickerSetting(
  82. value: 0.1,
  83. step: 0.1,
  84. min: 0.05,
  85. max: 1,
  86. type: PickerSetting.PickerSettingType.insulinUnit
  87. )
  88. var insulinPeakTime = PickerSetting(value: 75, step: 1, min: 30, max: 120, type: PickerSetting.PickerSettingType.factor)
  89. var carbsReqThreshold = PickerSetting(value: 1.0, step: 0.1, min: 0, max: 10, type: PickerSetting.PickerSettingType.gramms)
  90. var noisyCGMTargetMultiplier = PickerSetting(
  91. value: 1.3,
  92. step: 0.1,
  93. min: 1,
  94. max: 2,
  95. type: PickerSetting.PickerSettingType.factor
  96. )
  97. var maxDeltaBGthreshold = PickerSetting(
  98. value: 0.2,
  99. step: 0.1,
  100. min: 0.1,
  101. max: 2,
  102. type: PickerSetting.PickerSettingType.glucose
  103. )
  104. var adjustmentFactor = PickerSetting(value: 0.8, step: 0.1, min: 0.5, max: 1.5, type: PickerSetting.PickerSettingType.factor)
  105. var adjustmentFactorSigmoid = PickerSetting(
  106. value: 0.5,
  107. step: 0.1,
  108. min: 0.5,
  109. max: 2,
  110. type: PickerSetting.PickerSettingType.factor
  111. )
  112. var weightPercentage = PickerSetting(value: 0.65, step: 0.1, min: 0.1, max: 1, type: PickerSetting.PickerSettingType.factor)
  113. var enableSMB_high_bg_target = PickerSetting(
  114. value: 110,
  115. step: 1,
  116. min: 70,
  117. max: 200,
  118. type: PickerSetting.PickerSettingType.glucose
  119. )
  120. var threshold_setting = PickerSetting(value: 65, step: 1, min: 50, max: 100, type: PickerSetting.PickerSettingType.glucose)
  121. var updateInterval = PickerSetting(value: 20, step: 1, min: 1, max: 60, type: PickerSetting.PickerSettingType.minute)
  122. var delay = PickerSetting(value: 20, step: 1, min: 1, max: 60, type: PickerSetting.PickerSettingType.minute)
  123. var minuteInterval = PickerSetting(value: 20, step: 1, min: 1, max: 60, type: PickerSetting.PickerSettingType.minute)
  124. var timeCap = PickerSetting(value: 20, step: 1, min: 1, max: 60, type: PickerSetting.PickerSettingType.minute)
  125. var hours = PickerSetting(value: 6, step: 1, min: 2, max: 24, type: PickerSetting.PickerSettingType.hour)
  126. var dia = PickerSetting(value: 6, step: 0.5, min: 4, max: 10, type: PickerSetting.PickerSettingType.hour)
  127. var maxBolus = PickerSetting(value: 10, step: 1, min: 1, max: 30, type: PickerSetting.PickerSettingType.insulinUnit)
  128. var maxBasal = PickerSetting(value: 10, step: 1, min: 1, max: 30, type: PickerSetting.PickerSettingType.insulinUnit)
  129. }
  130. struct PickerSetting {
  131. var value: Decimal
  132. var step: Decimal
  133. var min: Decimal
  134. var max: Decimal
  135. var type: PickerSettingType
  136. enum PickerSettingType {
  137. case glucose
  138. case factor
  139. case gramms
  140. case insulinUnit
  141. case minute
  142. case hour
  143. }
  144. }