using System; using TINK.Model.Connector; using TINK.Model.Device; using TINK.Model.User; using TINK.Services.BluetoothLock; using TINK.Services.Geolocation; using TINK.View; namespace TINK.ViewModel.Bikes.Bike { public static class BikeViewModelFactory { /// Provides info about the smart device (phone, tablet, ...). /// Provides in use state information. /// View model to be used for progress report and unlocking/ locking view. /// Delegate to open browser. public static BikeViewModelBase Create( Func isConnectedDelegate, Func connectorFactory, IGeolocation geolocation, ILocksService lockService, Action bikeRemoveDelegate, Func viewUpdateManager, ISmartDevice smartDevice, IViewService viewService, Model.Bikes.BikeInfoNS.BC.BikeInfoMutable bikeInfo, IUser activeUser, IInUseStateInfoProvider stateInfoProvider, IBikesViewModel bikesViewModel, Action openUrlInBrowser) { if (bikeInfo is Model.Bikes.BikeInfoNS.BluetoothLock.BikeInfoMutable) { return new BluetoothLock.BikeViewModel( isConnectedDelegate, connectorFactory, geolocation, lockService, bikeRemoveDelegate, viewUpdateManager, smartDevice, viewService, bikeInfo as Model.Bikes.BikeInfoNS.BluetoothLock.BikeInfoMutable, activeUser, stateInfoProvider, bikesViewModel, openUrlInBrowser); } if (bikeInfo is Model.Bikes.BikeInfoNS.CopriLock.BikeInfoMutable) { return new CopriLock.BikeViewModel( isConnectedDelegate, connectorFactory, bikeRemoveDelegate, viewUpdateManager, smartDevice, viewService, bikeInfo, activeUser, stateInfoProvider, bikesViewModel, openUrlInBrowser); } return null; } } }