using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using Props.Shop.Framework; namespace Props.Models { public class SearchOutline { public int Id { get; set; } [Required] public string ApplicationUserId { get; set; } public Filters Filters { get; set; } public int MaxResults { get; set; } = 100; [Required] public ShopToggler ShopStates { get; set; } = new ShopToggler(); public sealed class ShopToggler : HashSet { public int TotalShops { get; set; } public bool this[string name] { get { return !this.Contains(name); } set { if (value == false && TotalShops - Count <= 1) return; if (value) { this.Remove(name); } else { this.Add(name); } } } public ShopToggler Copy() { ShopToggler copy = new ShopToggler(); copy.Union(this); return copy; } public bool IsShopToggleable(string shop) { return (!Contains(shop) && TotalShops - Count > 1) || Contains(shop); } } public override bool Equals(object obj) { if (obj == null || GetType() != obj.GetType()) { return false; } SearchOutline other = (SearchOutline)obj; return Id == other.Id && MaxResults == other.MaxResults && Filters.Equals(other.Filters) && ShopStates.Equals(other.ShopStates); } public override int GetHashCode() { return Id; } } }