// LoopFollow // Storage.swift // Created by Jonas Björkert on 2024-09-17. import Foundation import HealthKit import UIKit /* Observable persistant storage */ class Storage { var remoteType = StorageValue(key: "remoteType", defaultValue: .nightscout) var deviceToken = StorageValue(key: "deviceToken", defaultValue: "") var expirationDate = StorageValue(key: "expirationDate", defaultValue: nil) var sharedSecret = StorageValue(key: "sharedSecret", defaultValue: "") var productionEnvironment = StorageValue(key: "productionEnvironment", defaultValue: true) var apnsKey = StorageValue(key: "apnsKey", defaultValue: "") var teamId = StorageValue(key: "teamId", defaultValue: nil) var keyId = StorageValue(key: "keyId", defaultValue: "") var bundleId = StorageValue(key: "bundleId", defaultValue: "") var user = StorageValue(key: "user", defaultValue: "") var maxBolus = SecureStorageValue(key: "maxBolus", defaultValue: HKQuantity(unit: .internationalUnit(), doubleValue: 1.0)) var maxCarbs = SecureStorageValue(key: "maxCarbs", defaultValue: HKQuantity(unit: .gram(), doubleValue: 30.0)) var maxProtein = SecureStorageValue(key: "maxProtein", defaultValue: HKQuantity(unit: .gram(), doubleValue: 30.0)) var maxFat = SecureStorageValue(key: "maxFat", defaultValue: HKQuantity(unit: .gram(), doubleValue: 30.0)) var mealWithBolus = StorageValue(key: "mealWithBolus", defaultValue: false) var mealWithFatProtein = StorageValue(key: "mealWithFatProtein", defaultValue: false) var cachedJWT = StorageValue(key: "cachedJWT", defaultValue: nil) var jwtExpirationDate = StorageValue(key: "jwtExpirationDate", defaultValue: nil) var backgroundRefreshType = StorageValue(key: "backgroundRefreshType", defaultValue: .silentTune) var selectedBLEDevice = StorageValue(key: "selectedBLEDevice", defaultValue: nil) var debugLogLevel = StorageValue(key: "debugLogLevel", defaultValue: false) var contactTrend = StorageValue(key: "contactTrend", defaultValue: .off) var contactDelta = StorageValue(key: "contactDelta", defaultValue: .off) var contactEnabled = StorageValue(key: "contactEnabled", defaultValue: false) var contactBackgroundColor = StorageValue(key: "contactBackgroundColor", defaultValue: ContactColorOption.black.rawValue) var contactTextColor = StorageValue(key: "contactTextColor", defaultValue: ContactColorOption.white.rawValue) var sensorScheduleOffset = StorageValue(key: "sensorScheduleOffset", defaultValue: nil) var alarms = StorageValue<[Alarm]>(key: "alarms", defaultValue: []) var alarmConfiguration = StorageValue(key: "alarmConfiguration", defaultValue: .default) var lastOverrideStartNotified = StorageValue(key: "lastOverrideStartNotified", defaultValue: nil) var lastOverrideEndNotified = StorageValue(key: "lastOverrideEndNotified", defaultValue: nil) var lastTempTargetStartNotified = StorageValue(key: "lastTempTargetStartNotified", defaultValue: nil) var lastTempTargetEndNotified = StorageValue(key: "lastTempTargetEndNotified", defaultValue: nil) var lastRecBolusNotified = StorageValue(key: "lastRecBolusNotified", defaultValue: nil) var lastCOBNotified = StorageValue(key: "lastCOBNotified", defaultValue: nil) var lastMissedBolusNotified = StorageValue(key: "lastMissedBolusNotified", defaultValue: nil) // General Settings [BEGIN] var appBadge = StorageValue(key: "appBadge", defaultValue: true) var colorBGText = StorageValue(key: "colorBGText", defaultValue: true) var forceDarkMode = StorageValue(key: "forceDarkMode", defaultValue: true) var showStats = StorageValue(key: "showStats", defaultValue: true) var useIFCC = StorageValue(key: "useIFCC", defaultValue: false) var showSmallGraph = StorageValue(key: "showSmallGraph", defaultValue: true) var screenlockSwitchState = StorageValue(key: "screenlockSwitchState", defaultValue: true) var showDisplayName = StorageValue(key: "showDisplayName", defaultValue: false) var snoozerEmoji = StorageValue(key: "snoozerEmoji", defaultValue: false) var speakBG = StorageValue(key: "speakBG", defaultValue: false) var speakBGAlways = StorageValue(key: "speakBGAlways", defaultValue: true) var speakLowBG = StorageValue(key: "speakLowBG", defaultValue: false) var speakProactiveLowBG = StorageValue(key: "speakProactiveLowBG", defaultValue: false) var speakFastDropDelta = StorageValue(key: "speakFastDropDelta", defaultValue: 10.0) var speakLowBGLimit = StorageValue(key: "speakLowBGLimit", defaultValue: 72.0) var speakHighBGLimit = StorageValue(key: "speakHighBGLimit", defaultValue: 180.0) var speakHighBG = StorageValue(key: "speakHighBG", defaultValue: false) var speakLanguage = StorageValue(key: "speakLanguage", defaultValue: "en") // General Settings [END] // Graph Settings [BEGIN] var showDots = StorageValue(key: "showDots", defaultValue: true) var showLines = StorageValue(key: "showLines", defaultValue: true) var showValues = StorageValue(key: "showValues", defaultValue: true) var showAbsorption = StorageValue(key: "showAbsorption", defaultValue: true) var showDIALines = StorageValue(key: "showDIAMarkers", defaultValue: true) var show30MinLine = StorageValue(key: "show30MinLine", defaultValue: false) var show90MinLine = StorageValue(key: "show90MinLine", defaultValue: false) var showMidnightLines = StorageValue(key: "showMidnightMarkers", defaultValue: false) var smallGraphTreatments = StorageValue(key: "smallGraphTreatments", defaultValue: true) var smallGraphHeight = StorageValue(key: "smallGraphHeight", defaultValue: 40) var predictionToLoad = StorageValue(key: "predictionToLoad", defaultValue: 1.0) var minBasalScale = StorageValue(key: "minBasalScale", defaultValue: 5.0) var minBGScale = StorageValue(key: "minBGScale", defaultValue: 250.0) var lowLine = StorageValue(key: "lowLine", defaultValue: 70.0) var highLine = StorageValue(key: "highLine", defaultValue: 180.0) var downloadDays = StorageValue(key: "downloadDays", defaultValue: 1) // Graph Settings [END] static let shared = Storage() private init() {} }