ContactTrickEntry.swift 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. import CoreData
  2. import SwiftUI
  3. struct ContactTrickEntry: Hashable, Sendable {
  4. var id = UUID()
  5. var name: String = ""
  6. var layout: ContactTrickLayout = .single
  7. var ring: ContactTrickLargeRing = .none
  8. var primary: ContactTrickValue = .glucose
  9. var top: ContactTrickValue = .none
  10. var bottom: ContactTrickValue = .none
  11. var contactId: String? = nil
  12. var darkMode: Bool = true
  13. var ringWidth: RingWidth = .regular
  14. var ringGap: RingGap = .small
  15. var fontSize: FontSize = .regular
  16. var secondaryFontSize: FontSize = .small
  17. var fontWeight: Font.Weight = .medium
  18. var fontWidth: Font.Width = .standard
  19. var managedObjectID: NSManagedObjectID?
  20. // Convert `fontWeight` to a String for Core Data storage
  21. var fontWeightString: String {
  22. fontWeight.asString
  23. }
  24. // Initialize `fontWeight` from a String
  25. static func fontWeight(from string: String) -> Font.Weight {
  26. Font.Weight.fromString(string)
  27. }
  28. // Convert `fontWidth` to a String for Core Data storage
  29. var fontWidthString: String {
  30. fontWidth.asString
  31. }
  32. // Initialize `fontWidth` from a String
  33. static func fontWidth(from string: String) -> Font.Width {
  34. Font.Width.fromString(string)
  35. }
  36. enum FontSize: Int, Codable, Sendable, CaseIterable {
  37. case tiny = 200
  38. case small = 250
  39. case regular = 300
  40. case large = 400
  41. var displayName: String {
  42. switch self {
  43. case .tiny: return "Tiny"
  44. case .small: return "Small"
  45. case .regular: return "Regular"
  46. case .large: return "Large"
  47. }
  48. }
  49. }
  50. enum RingWidth: Int, Codable, Sendable, CaseIterable {
  51. case tiny = 3
  52. case small = 5
  53. case regular = 7
  54. case medium = 10
  55. case large = 15
  56. var displayName: String {
  57. switch self {
  58. case .tiny: return "Tiny"
  59. case .small: return "Small"
  60. case .regular: return "Regular"
  61. case .medium: return "Medium"
  62. case .large: return "Large"
  63. }
  64. }
  65. }
  66. enum RingGap: Int, Codable, Sendable, CaseIterable {
  67. case tiny = 1
  68. case small = 2
  69. case regular = 3
  70. case medium = 4
  71. case large = 5
  72. var displayName: String {
  73. switch self {
  74. case .tiny: return "Tiny"
  75. case .small: return "Small"
  76. case .regular: return "Regular"
  77. case .medium: return "Medium"
  78. case .large: return "Large"
  79. }
  80. }
  81. }
  82. }
  83. protocol ContactTrickObserver: Sendable {
  84. // TODO: is this required?
  85. // func basalProfileDidChange(_ entry: [ContactTrickEntry])
  86. }
  87. enum ContactTrickValue: String, JSON, CaseIterable, Identifiable, Codable {
  88. var id: String { rawValue }
  89. case none
  90. case glucose
  91. case eventualBG
  92. case delta
  93. case trend
  94. case lastLoopDate
  95. case cob
  96. case iob
  97. case ring
  98. var displayName: String {
  99. switch self {
  100. case .none:
  101. return NSLocalizedString("NoneContactValue", comment: "")
  102. case .glucose:
  103. return NSLocalizedString("GlucoseContactValue", comment: "")
  104. case .eventualBG:
  105. return NSLocalizedString("EventualBGContactValue", comment: "")
  106. case .delta:
  107. return NSLocalizedString("DeltaContactValue", comment: "")
  108. case .trend:
  109. return NSLocalizedString("TrendContactValue", comment: "")
  110. case .lastLoopDate:
  111. return NSLocalizedString("LastLoopTimeContactValue", comment: "")
  112. case .cob:
  113. return NSLocalizedString("COBContactValue", comment: "")
  114. case .iob:
  115. return NSLocalizedString("IOBContactValue", comment: "")
  116. case .ring:
  117. return NSLocalizedString("LoopStatusContactValue", comment: "")
  118. }
  119. }
  120. }
  121. enum ContactTrickLayout: String, JSON, CaseIterable, Identifiable, Codable {
  122. var id: String { rawValue }
  123. case single
  124. case split
  125. var displayName: String {
  126. switch self {
  127. case .single:
  128. return NSLocalizedString("Single", comment: "")
  129. case .split:
  130. return NSLocalizedString("Split", comment: "")
  131. }
  132. }
  133. }
  134. enum ContactTrickLargeRing: String, JSON, CaseIterable, Identifiable, Codable {
  135. var id: String { rawValue }
  136. case none
  137. case loop
  138. case iob
  139. case cob
  140. case iobcob
  141. var displayName: String {
  142. switch self {
  143. case .none:
  144. return NSLocalizedString("DontShowRing", comment: "")
  145. case .loop:
  146. return NSLocalizedString("LoopStatusRing", comment: "")
  147. case .iob:
  148. return NSLocalizedString("IOBRing", comment: "")
  149. case .cob:
  150. return NSLocalizedString("COBRing", comment: "")
  151. case .iobcob:
  152. return NSLocalizedString("IOB+COBRing", comment: "")
  153. }
  154. }
  155. }