using System.Collections.Generic;
using System.Linq;
using ShareeBike.Model;
using ShareeBike.Model.Connector;
using ShareeBike.Model.Connector.Filter;
using Xamarin.Forms;
namespace ShareeBike.ViewModel.Map
{
/// Old name: MapPageFilter.
public class CargoCitybikeToggleViewModel : ICargoCitybikeToggleViewModel
{
/// Constructs a map page filter view model object from values.
/// Filters and options dictionary.
public CargoCitybikeToggleViewModel(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 ShareeBike is enabled or not.
public bool IsCargoEnabled => !string.IsNullOrEmpty(CurrentFilter) && CurrentFilter.GetBikeCategory() != FilterHelper.CARGOBIKE;
/// Gets color of the ShareeBike button.
public Color CargoColor => CurrentFilter.GetBikeCategory() == FilterHelper.CARGOBIKE ? Color.White : Color.FromRgba(0, 0, 0, 0);
public Color NoCargoColor => CurrentFilter.GetBikeCategory() == FilterHelper.CARGOBIKE ? Color.FromRgb(210, 17, 20) : Color.White;
/// Gets value whether Citybike is enabled or not.
public bool IsCitybikeEnabled => !string.IsNullOrEmpty(CurrentFilter) && CurrentFilter.GetBikeCategory() != FilterHelper.CITYBIKE;
/// Gets color of the Citybike button.
public Color CitybikeColor => CurrentFilter.GetBikeCategory() == FilterHelper.CITYBIKE ? Color.White : Color.FromRgba(0, 0, 0, 0);
public Color NoCitybikeColor => 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)
&& (IsCargoEnabled || IsCitybikeEnabled);
///
/// Toggles from bike group Cargo to Citybike or vice versa.
/// Toggling means one of
/// - ShareeBike => Citybike or
/// - ShareeBike => Citybike.
///
/// Filter set to toggle.
///
public CargoCitybikeToggleViewModel DoToggle()
{
var currentFilterSet = FilterDictionary.ToArray();
if (currentFilterSet.Length < 2)
{
// There is nothing to toggle because filter set contains only one element.
return new CargoCitybikeToggleViewModel(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 CargoCitybikeToggleViewModel(new GroupFilterMapPage(toggledFilterSet));
}
}
}