using System;
using System.Collections.Generic;
using System.Diagnostics.Contracts;
using System.Linq;
using System.Text;
namespace DominionBase
{
public class Option : IComparable
{
public bool IsRequired { get; }
public IGameObject Source { get; }
public string Text { get; }
public string Value { get; internal set; }
public Option(string text, bool isRequired = false, IGameObject source = null)
{
Text = text;
IsRequired = isRequired;
Value = text;
Source = source;
}
public int CompareTo(Option option)
{
Contract.Requires(option != default(Option), "option cannot be null");
if (ReferenceEquals(this, option))
return 0;
int v = string.Compare(Text, option.Text, StringComparison.CurrentCulture);
if (v != 0)
return v;
v = string.Compare(Value, option.Value, StringComparison.CurrentCulture);
if (v != 0)
return v;
return IsRequired.CompareTo(option.IsRequired);
}
}
public class OptionCollection : List
{
public bool IsAnyRequired { get { return this.Any(o => o.IsRequired); } }
public bool IsAllRequired { get { return this.All(o => o.IsRequired); } }
public bool Contains(string item) { return this.Any(o => o.Text == item); }
public void Add(string item, bool isRequired = false, IGameObject source = null) { Add(new Option(item, isRequired, source)); }
public int IndexOf(string item) { return FindIndex(o => o.Text == item); }
public bool Remove(string item)
{
if (!Contains(item))
return false;
Remove(Find(o => o.Text == item));
return true;
}
public OptionCollection() : base() { }
public OptionCollection(IEnumerable collection) : base(collection) { }
public OptionCollection(IEnumerable collection)
{
Contract.Requires(collection != null, "collection cannot be null");
foreach (string item in collection)
Add(new Option(item));
}
public OptionCollection(IEnumerable collection, IGameObject source)
{
Contract.Requires(collection != null, "collection cannot be null");
foreach (string item in collection)
Add(new Option(item, source: source));
}
}
}