using Serilog; using System; using System.Threading.Tasks; using TINK.Model.State; using TINK.View; namespace TINK.ViewModel.Bikes.Bike.BluetoothLock { public class NotLoggedIn : IRequestHandler { /// View model to be used for progress report and unlocking/ locking view. public NotLoggedIn( InUseStateEnum state, IViewService viewService, IBikesViewModel bikesViewModel) { State = state; ViewService = viewService; BikesViewModel = bikesViewModel ?? throw new ArgumentException($"Can not construct {GetType().Name}-object. {nameof(bikesViewModel)} must not be null."); } /// View model to be used for progress report and unlocking/ locking view. public IBikesViewModel BikesViewModel { get; } public InUseStateEnum State { get; } public bool IsButtonVisible => true; public bool IsLockitButtonVisible => false; public string ButtonText => BC.StateToText.GetActionText(State); public string LockitButtonText => GetType().Name; /// /// Reference on view service to show modal notifications and to perform navigation. /// private IViewService ViewService { get; } public bool IsConnected => throw new NotImplementedException(); /// Gets if the bike has to be remvoed after action has been completed. public bool IsRemoveBikeRequired => false; public async Task HandleRequestOption1() { Log.ForContext().Information("User selected bike but is not logged in."); // User is not logged in BikesViewModel.ActionText = string.Empty; var l_oResult = await ViewService.DisplayAlert( "Hinweis", "Bitte anmelden vor Reservierung eines Fahrrads!\r\nAuf Anmeldeseite wechseln?", "Ja", "Nein"); if (l_oResult == false) { // User aborted booking process BikesViewModel.IsIdle = true; return this; } try { // Switch to map page #if USEFLYOUT ViewService.ShowPage(ViewTypes.LoginPage); #else await ViewService.ShowPage("//LoginPage"); #endif } catch (Exception p_oException) { Log.ForContext().Error("Ein unerwarteter Fehler ist in der Klasse NotLoggedIn aufgetreten. Kontext: Aufruf nach Reservierungsversuch ohne Anmeldung. {@Exception}", p_oException); BikesViewModel.IsIdle = true; return this; } BikesViewModel.IsIdle = true; return this; } public async Task HandleRequestOption2() { Log.ForContext().Error("Click of unsupported button detected."); return await Task.FromResult(this); } public string ErrorText => string.Empty; } }