using System.ComponentModel; using TINK.Model; namespace TINK.ViewModel.Bikes { public enum CurrentRentalProcess { None = 0, ReserveBike = 1, StartRental = 2, OpenLock = 3, CloseLock = 4, EndRental = 5, } public enum CurrentStepStatus { None = 0, Succeeded = 1, Failed = 2, } public class RentalProcess : IRentalProcess, INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public RentalProcess(string bikeId = null) => BikeId = bikeId ?? string.Empty; /// /// Gets the id of the bike which is rental ends. /// public string BikeId { get; } /// Holds info about active rental process. private CurrentRentalProcess _state = CurrentRentalProcess.None; /// Holds info about active rental process. public CurrentRentalProcess State { get => _state; set { if (_state == value) { return; } _state = value; if (value == CurrentRentalProcess.None) { StepIndex = null; Result = CurrentStepStatus.None; } PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(State))); PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(StepIndex))); PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Result))); } } /// Holds info about current step in rental process. private int? _stepIndex; /// Holds info about current step in rental process. public int? StepIndex { get => _stepIndex; set { if (_stepIndex == value) { return; } _stepIndex = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(StepIndex))); } } /// Holds info about current step. private string _stepInfoText; /// Holds info about current step. public string StepInfoText { get => _stepInfoText; set { if (value == _stepInfoText) return; _stepInfoText = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(StepInfoText))); } } /// Holds important info about current step. private string _importantStepInfoText; /// Holds important info about current step. public string ImportantStepInfoText { get => _importantStepInfoText; set { if (value == _importantStepInfoText) return; _importantStepInfoText = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(ImportantStepInfoText))); } } /// Holds info about status of current rental process. private CurrentStepStatus _result = CurrentStepStatus.None; /// Holds info about status of current rental process. public CurrentStepStatus Result { get => _result; set { if (_result == value) { return; } _result = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Result))); } } /// /// Holds the info returned from back end when rent is ended. /// public BookingFinishedModel EndRentalInfo { get; set; } } }