// // UnitReportsViewModel.swift // iosApp // // Created by Iván on 13/02/22. // Copyright © 2022 orgName. All rights reserved. // import Foundation import Combine import shared class UnitReportsViewModel: ObservableObject { @Inject var reportController: ReportController @Published var deviceId: Int32? = nil @Published var reportType: ReportController.ReportType = .positions @Published var reportPeriod: ReportDates.ReportPeriod = .today @Published var report: ReportController.Report? = nil { didSet { switch report { case let report as ReportController.ReportPositionsReport: markers = report.positions.compactMap { p in Marker.companion.fromPosition(position: p)} case is ReportController.ReportEventsReport: markers = [] case let report as ReportController.ReportStopsReport: markers = report.stops.compactMap { s in Marker.companion.fromStop(stop: s) } default: break } } } @Published var layer = MapLayer.companion.defaultLayer @Published var markers = [Marker]() @Published var selectedMarker: Marker? = nil init(deviceId id: Int32?) { deviceId = id let collector = Collector(callback: setReport) reportController.reportFlow.collect(collector: collector) { _, _ in } } func setReport (report: ReportController.Report) { self.report = report } func fetchReport(xlsx: Bool = false) { if let id = deviceId { reportController.fetchReport(deviceId: id, reportType: reportType, reportPeriod: reportPeriod, xlsx: xlsx, eventTypes: [ .deviceInactive, .deviceMoving, .deviceStopped, .deviceOverspeed, .deviceFuelDrop, .commandResult, .geofenceEnter, .geofenceExit, .alarm, .ignitionOn, .ignitionOff, .maintenance, .textMessage, .driverChanged, .unknown ]) } } }