using System; using System.Collections.Generic; namespace TINK.Model.Bike { /// Count of wheels. public enum WheelType { Mono = 0, Two = 1, Trike = 2, } /// Type of bike. public enum TypeOfBike { Allround = 0, Cargo = 1, Citybike = 2, } public class Bike : IEquatable { /// /// Constructs a bike. /// /// Provider for current date time to calculate remainig time on demand for state of type reserved. /// /// Unique id of bike. /// Name of station where bike is located, null if bike is on the road. public Bike( string p_iId, WheelType? wheelType = null, TypeOfBike? typeOfBike = null, string description = null) { WheelType = wheelType; TypeOfBike = typeOfBike; Id = p_iId; Description = description; } /// /// Holds the unique id of the bike; /// public string Id { get; } /// /// Holds the count of wheels. /// public WheelType? WheelType { get; } /// /// Holds the type of bike. /// public TypeOfBike? TypeOfBike { get; } /// Holds the description of the bike. public string Description { get; } /// Compares two bike object. /// Object to compare with. /// True if bikes are equal. public override bool Equals(object obj) { var l_oBike = obj as Bike; if (l_oBike == null) { return false; } return Equals(l_oBike); } /// Converts the instance to text. public new string ToString() { return WheelType == null || TypeOfBike == null ? $"Id={Id}{(!string.IsNullOrEmpty(Description) ? $", {Description}" : "")}" : $"Id={Id}{(WheelType != null ? $", wheel(s)={WheelType}" : string.Empty)}{(TypeOfBike != null ? $"type={TypeOfBike}" : "")}."; } /// Compares two bike object. /// Object to compare with. /// True if bikes are equal. public bool Equals(Bike other) { return other != null && Id == other.Id && WheelType == other.WheelType && TypeOfBike == other.TypeOfBike && Description == other.Description; } /// Compares two bike object. /// Object to compare with. /// True if bikes are equal. public static bool operator ==(Bike bike1, Bike bike2) { return EqualityComparer.Default.Equals(bike1, bike2); } /// Compares two bike object. /// Object to compare with. /// True if bikes are equal. public static bool operator !=(Bike bike1, Bike bike2) { return !(bike1 == bike2); } /// /// Generates hash code for bike object. /// /// public override int GetHashCode() { var hashCode = -390870100; hashCode = hashCode * -1521134295 + Id.GetHashCode(); hashCode = hashCode * -1521134295 + WheelType?.GetHashCode() ?? 0; hashCode = hashCode * -1521134295 + TypeOfBike?.GetHashCode() ?? 0; hashCode = hashCode * -1521134295 + Description?.GetHashCode() ?? 0; return hashCode; } } }