import Foundation struct TemperatureMeasurement: Identifiable { var sensor0: TemperatureValue var sensor1: TemperatureValue var date: Date var id: Int { Int(date.timeIntervalSince1970.rounded()) } var secondsAgo: Int { Int(date.timeIntervalSinceNow.rounded()) } } private extension TemperatureValue { init(value: Double?) { if let value { self = .value(value) } else { self = .notFound } } } private extension TemperatureMeasurement { init(t0: Double?, t1: Double?, secs: Int) { self.sensor0 = .init(value: t0) self.sensor1 = .init(value: t1) self.date = Date().addingTimeInterval(TimeInterval(secs-3600)) } init(t0: Double?, t1: Double?, min: Int) { self.init(t0: t0, t1: t1, secs: min * 60) } } extension TemperatureMeasurement { static let mockData: [TemperatureMeasurement] = { let temps: [(Double?, Double?)] = [ (20, 14), (20, 13.5), (20.5, 13.5), (20.5, 13.5), (21, 14), (21, 14), (nil, 14.5), (nil, 14), (nil, 14.5), (nil, 14), (nil, 14), (nil, 14.5), (nil, 15), (5.0, 15), (4.5, 15.5), (4.5, 16), (4.0, 16.5), (3.0, 17), (3.0, 19), (2.5, 20), (2.5, 20.5), (2.0, 20.5), (1.0, 20.5), (0.5, 20.5), (0.0, 20), (0.0, 20), (-1.0, 21.0), (-0.5, 21.0), (-3.0, 21.0), (-3.5, 20.5), (-4.0, 20.5), (-5.0, 20.0), (-5.0, nil), (-5.5, nil), (-5.0, nil), (-5.5, nil), (-6.0, nil), (-5.0, nil), (nil, nil), (nil, nil), (nil, nil), (-5.0, nil), (-4.5, nil), (-4.0, 23.0), (5.0, 24.0), (7.0, 25.0), (8.0, 25.5), (8.5, 25.5), (10.0, 25.5), (10.5, 24.0), (10.5, 24.0), (10.5, 24.5), (12.0, 23.5), (12.5, 24.0), (12.0, 23.5), (14.0, 24.0), (15.0, 25.0), (15.0, 25.0), (15.5, 25.0), (15.0, 25.0), ] return temps.enumerated().map { TemperatureMeasurement(t0: $0.element.0, t1: $0.element.1, min: $0.offset) } }() }