using System.Collections.Generic; using System.Linq; namespace TINK.Model.Bike { public static class BikeCollectionUpdater { /// Updates bikes lock info with the latest lock info from bluetooth service. /// bikes to be updated. /// locks info to be used for updating bikes. /// public static BikeCollection UpdateLockInfo( this BikeCollection bikes, IEnumerable locksInfo) { var updatedBikesCollection = new Dictionary(); foreach (var bikeInfo in bikes) { if (!(bikeInfo is BluetoothLock.BikeInfo bluetoothBikeInfo)) { // No processing needed because bike is not a bluetooth bike updatedBikesCollection.Add(bikeInfo.Id, bikeInfo); continue; } // Check if to update current bike lock info using state from bluetooth service or not. var currentLockInfo = locksInfo.FirstOrDefault(x => x.Id == bluetoothBikeInfo.LockInfo.Id) // Update bike info with latest info from bluethooth service if available ?? bluetoothBikeInfo.LockInfo; // Use lock info state object from copri which holds a lock id and a state of value unknown. updatedBikesCollection.Add(bluetoothBikeInfo.Id, new BluetoothLock.BikeInfo(bluetoothBikeInfo, currentLockInfo)); } return new BikeCollection(updatedBikesCollection); } } }