import Foundation import CoreData import DifferenceKit public struct Vehicle: Decodable { public let number: String public let currentNumber: String? public let brand: VBrand? public let model: VModel? public let addedDate: TimeInterval public let updatedDate: TimeInterval public let color: String? public let year: Int64? public let category: String? public let vin1: String? public let vin2: String? public let sts: String? public let pts: String? public let isRightWheel: Bool? public let isJapanese: Bool? public let addedBy: String? public let engine: VEngine? public let photos: [VPhoto]? public let ownershipPeriods: [VOwnershipPeriod]? public let events: [VEvent]? public let osagoContracts: [VOsago]? public let ads: [VAd]? public let notes: [VNote]? public let debugInfo: DebugInfo? } extension CDVehicle: Dated { public var updatedAt: Date { Date(timeIntervalSince1970: updatedDate) } public var addedAt: Date { Date(timeIntervalSince1970: addedDate) } } extension CDVehicle: Differentiable { public var differenceIdentifier: String { number! } public func isContentEqual(to source: CDVehicle) -> Bool { return number == source.number && addedDate == source.addedDate && updatedDate == source.updatedDate } } extension CDVehicle { convenience init(vehicle: Vehicle, context: NSManagedObjectContext) { self.init(context: context) self.number = vehicle.number self.currentNumber = vehicle.currentNumber self.addedDate = vehicle.addedDate/1000 self.updatedDate = vehicle.updatedDate/1000 self.color = vehicle.color self.brand = CDVBrand(vbrand: vehicle.brand, context: context) self.model = CDVModel(model: vehicle.model, context: context) self.year = vehicle.year ?? 0 self.category = category self.vin1 = vehicle.vin1 self.vin2 = vehicle.vin2 self.sts = vehicle.sts self.pts = vehicle.pts self.isRightWheel = vehicle.isRightWheel ?? false self.isJapanese = vehicle.isJapanese ?? false self.addedBy = vehicle.addedBy self.synchronized = true self.engine = CDVEngine(model: vehicle.engine, context: context) let photos = vehicle.photos?.map { CDVPhoto(model: $0, context: context) } ?? [] self.photos = NSSet(array: photos) let ownershipPeriods = vehicle.ownershipPeriods?.map { CDVOwnershipPeriod(model: $0, context: context) } ?? [] self.ownershipPeriods = NSSet(array: ownershipPeriods) let events = vehicle.events?.map { CDVEvent(model: $0, context: context) } ?? [] self.events = NSSet(array: events) let osagoContracts = vehicle.osagoContracts?.map { CDVOsago(model: $0, context: context) } ?? [] self.osagoContracts = NSSet(array: osagoContracts) let ads = vehicle.ads?.map { CDVAd(model: $0, context: context) } ?? [] self.ads = NSSet(array: ads) let notes = vehicle.notes?.map { CDVNote(model: $0, context: context) } ?? [] self.notes = NSSet(array: notes) self.debugInfo = CDDebugInfo(model: vehicle.debugInfo, context: context) } public var unrecognized: Bool { return self.brand == nil } public var outdated: Bool { if let current = self.currentNumber { return current != self.number } else { return false } } }