using System.Collections.Generic;
using System.Linq;
namespace TINK.Model.Bikes
{
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 BikeInfoNS.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 BikeInfoNS.BluetoothLock.BikeInfo(bluetoothBikeInfo, currentLockInfo));
}
return new BikeCollection(updatedBikesCollection);
}
}
}