using Serilog; using System; using System.Threading.Tasks; using TINK.Model.State; using TINK.Model.User; using TINK.View; namespace TINK.ViewModel.Bikes.Bike.BC.RequestHandler { public class NotLoggedIn : IRequestHandler { /// <param name="bikesViewModel">View model to be used for progress report and unlocking/ locking view.</param> public NotLoggedIn( InUseStateEnum state, IViewService viewService, IBikesViewModel bikesViewModel, IUser activeUser) { State = state; IsIdle = true; ViewService = viewService; BikesViewModel = bikesViewModel ?? throw new ArgumentException($"Can not construct {GetType().Name}-object. {nameof(bikesViewModel)} must not be null."); } public InUseStateEnum State { get; } public bool IsButtonVisible => true; public bool IsIdle { get; private set; } public string ButtonText => State.GetActionText(); public string ActionText { get => BikesViewModel.ActionText; private set => BikesViewModel.ActionText = value; } /// <summary> /// Reference on view service to show modal notifications and to perform navigation. /// </summary> protected IViewService ViewService { get; } /// <summary>View model to be used for progress report and unlocking/ locking view.</summary> public IBikesViewModel BikesViewModel { get; } public bool IsConnected => throw new NotImplementedException(); /// <summary> Gets if the bike has to be removed after action has been completed. </summary> public bool IsRemoveBikeRequired => false; public async Task<IRequestHandler> HandleRequest() { Log.ForContext<NotLoggedIn>().Information("User selected bike but is not logged in."); // User is not logged in 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 IsIdle = true; return this; } try { // Switch to login page #if USEFLYOUT ViewService.ShowPage(ViewTypes.LoginPage); #else await ViewService.ShowPage("//LoginPage"); #endif } catch (Exception p_oException) { Log.ForContext<BikesViewModel>().Error("Ein unerwarteter Fehler ist in der Klasse NotLoggedIn aufgetreten. Kontext: Aufruf nach Reservierungsversuch ohne Anmeldung. {@Exception}", p_oException); IsIdle = true; return this; } IsIdle = true; return this; } } }