using System; using ShareeBike.Model.Connector; using ShareeBike.Model.Device; using ShareeBike.Model.User; using ShareeBike.Services.BluetoothLock; using ShareeBike.Services.Geolocation; using ShareeBike.View; namespace ShareeBike.ViewModel.Bikes.Bike.BluetoothLock.RequestHandler { public abstract class Base : BC.RequestHandler.Base { /// /// Constructs the request handler base. /// /// Bike which is reserved or for which reservation is canceled. /// Provides info about the smart device (phone, tablet, ...) /// View model to be used for progress report and unlocking/ locking view. public Base( Model.Bikes.BikeInfoNS.BluetoothLock.IBikeInfoMutable selectedBike, string buttonText, bool isCopriButtonVisible, Func isConnectedDelegate, Func connectorFactory, IGeolocationService geolocation, ILocksService lockService, Func viewUpdateManager, ISmartDevice smartDevice, IViewService viewService, IBikesViewModel bikesViewModel, IUser activeUser) : base(selectedBike, buttonText, isCopriButtonVisible, isConnectedDelegate, connectorFactory, viewUpdateManager, smartDevice, viewService, bikesViewModel, activeUser) { GeolocationService = geolocation ?? throw new ArgumentException($"Can not construct {GetType().Name}-object. Parameter {nameof(geolocation)} must not be null."); LockService = lockService ?? throw new ArgumentException($"Can not construct {GetType().Name}-object. Parameter {nameof(lockService)} must not be null."); } /// /// Service to query geolocation information. /// protected IGeolocationService GeolocationService { get; } /// /// Service to control locks. /// protected ILocksService LockService { get; } public string LockitButtonText { get; protected set; } public bool IsLockitButtonVisible { get; protected set; } public string ErrorText => string.Empty; } }