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.FILTERTINKGENERAL;
/// Gets color of the TINK button.
public Color TinkColor => CurrentFilter.GetBikeCategory() == FilterHelper.FILTERTINKGENERAL ? Color.Blue : Color.Gray;
/// Gets value whether Konrad is enabled or not.
public bool IsKonradEnabled => !string.IsNullOrEmpty(CurrentFilter) && CurrentFilter.GetBikeCategory() != FilterHelper.FILTERKONRAD;
/// Gets color of the Konrad button.
public Color KonradColor => CurrentFilter.GetBikeCategory() == FilterHelper.FILTERKONRAD ? Color.Red : Color.Gray;
/// Gets whether toggle functionality is visible or not.
public bool IsToggleVisible =>
FilterDictionary.Select(x => x.Key).ContainsGroupId(FilterHelper.FILTERKONRAD)
&& FilterDictionary.Select(x => x.Key).ContainsGroupId(FilterHelper.FILTERTINKGENERAL)
&& (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 l_oCurrentFilterSet = FilterDictionary.ToArray();
if (l_oCurrentFilterSet.Length < 2)
{
// There is nothing to toggle because filter set contains only one element.
return new TinkKonradToggleViewModel(FilterDictionary);
}
var l_oCurrentState = l_oCurrentFilterSet[l_oCurrentFilterSet.Length - 1].Value == FilterState.On
? FilterState.On
: FilterState.Off;
var l_oToggledFilterSet = new Dictionary();
foreach (var l_oFilterElement in l_oCurrentFilterSet)
{
l_oToggledFilterSet.Add(l_oFilterElement.Key, l_oCurrentState);
l_oCurrentState = l_oFilterElement.Value;
}
return new TinkKonradToggleViewModel(new GroupFilterMapPage(l_oToggledFilterSet));
}
}
}