using System.Collections.Generic; using System.Linq; using TINK.Model; using TINK.Model.Connector; using TINK.Model.Connector.Filter; using Xamarin.Forms; namespace TINK.ViewModel.Map { /// Old name: MapPageFilter. public class TinkKonradToggleViewModel : ITinkKonradToggleViewModel { /// Constructs a map page filter view model object from values. /// Filters and options dictionary. public TinkKonradToggleViewModel(IGroupFilterMapPage currentFilter) { FilterDictionary = currentFilter ?? new GroupFilterMapPage(); } /// Gets the filter values. public IGroupFilterMapPage FilterDictionary { get; } /// Gets the activated filter. public string CurrentFilter { get { return FilterDictionary.FirstOrDefault(x => x.Value == FilterState.On).Key ?? string.Empty; } } /// Gets value whether TINK is enabled or not. public bool IsTinkEnabled => !string.IsNullOrEmpty(CurrentFilter) && CurrentFilter.GetBikeCategory() != FilterHelper.CARGOBIKE; /// Gets color of the TINK button. public Color TinkColor => CurrentFilter.GetBikeCategory() == FilterHelper.CARGOBIKE ? Color.White : Color.FromRgba(0, 0, 0, 0); public Color NoTinkColor => CurrentFilter.GetBikeCategory() == FilterHelper.CARGOBIKE ? Color.FromRgb(210, 17, 20) : Color.White; /// Gets value whether Konrad is enabled or not. public bool IsKonradEnabled => !string.IsNullOrEmpty(CurrentFilter) && CurrentFilter.GetBikeCategory() != FilterHelper.CITYBIKE; /// Gets color of the Konrad button. public Color KonradColor => CurrentFilter.GetBikeCategory() == FilterHelper.CITYBIKE ? Color.White : Color.FromRgba(0, 0, 0, 0); public Color NoKonradColor => CurrentFilter.GetBikeCategory() == FilterHelper.CITYBIKE ? Color.FromRgb(210, 17, 20) : Color.White; /// Gets whether toggle functionality is visible or not. public bool IsToggleVisible => FilterDictionary.Select(x => x.Key).ContainsGroupId(FilterHelper.CITYBIKE) && FilterDictionary.Select(x => x.Key).ContainsGroupId(FilterHelper.CARGOBIKE) && (IsTinkEnabled || IsKonradEnabled); /// /// Toggles from bike group TINK to Konrad or vice versa. /// Toggling means one of /// - TINK => Konrad or /// - TINK => Konrad. /// /// Filter set to toggle. /// public TinkKonradToggleViewModel DoToggle() { var currentFilterSet = FilterDictionary.ToArray(); if (currentFilterSet.Length < 2) { // There is nothing to toggle because filter set contains only one element. return new TinkKonradToggleViewModel(FilterDictionary); } var currentState = currentFilterSet[currentFilterSet.Length - 1].Value == FilterState.On ? FilterState.On : FilterState.Off; var toggledFilterSet = new Dictionary(); foreach (var filterElement in currentFilterSet) { toggledFilterSet.Add(filterElement.Key, currentState); currentState = filterElement.Value; } return new TinkKonradToggleViewModel(new GroupFilterMapPage(toggledFilterSet)); } } }