2023-04-19 12:14:14 +02:00
using System ;
2021-05-13 20:03:07 +02:00
using System.Collections.Generic ;
2022-08-30 15:42:25 +02:00
namespace TINK.Model.Bikes.BikeInfoNS.BikeNS
{
2022-09-06 16:08:19 +02:00
/// <summary> Count of wheels. </summary>
/// <remarks> Numeric values of enum must match count of wheels</remarks>
public enum WheelType
{
Mono = 1 ,
Two = 2 ,
Trike = 3 ,
Quad = 4
}
/// <summary> Type of bike. </summary>
public enum TypeOfBike
{
Allround = 0 ,
Cargo = 1 ,
City = 2 ,
}
2023-04-19 12:14:14 +02:00
/// <summary> Holds whether bike is a AA bike (bike must be always returned a the same station) or AB bike (start and end stations can be different stations).</summary>
public enum AaRideType
{
NoAaRide = 0 ,
AaRide = 1 ,
}
2022-09-06 16:08:19 +02:00
/// <summary> Holds the model of lock. </summary>
public enum LockModel
{
ILockIt , // haveltec GbmH Brandenburg, Germany bluetooth lock
2023-04-19 12:14:14 +02:00
BordComputer , // TeilRad BC
Sigo , // Sigo GmbH Darmstadt, Germany bike lock
2022-09-06 16:08:19 +02:00
}
/// <summary> Holds the type of lock. </summary>
public enum LockType
{
Backend , // Backend, i.e. COPRI controls lock (open, close, ...)
Bluethooth , // Lock is controlled.
}
public class Bike : IEquatable < Bike >
{
/// <summary>
/// Constructs a bike.
/// </summary>
/// <param name="id">Unique id of bike.</param>
public Bike (
string id ,
LockModel lockModel ,
WheelType ? wheelType = null ,
TypeOfBike ? typeOfBike = null ,
2023-04-19 12:14:14 +02:00
AaRideType ? aaRideType = null ,
2022-09-06 16:08:19 +02:00
string description = null )
{
WheelType = wheelType ;
TypeOfBike = typeOfBike ;
2023-04-19 12:14:14 +02:00
AaRideType = aaRideType ;
2022-09-06 16:08:19 +02:00
LockModel = lockModel ;
Id = id ;
Description = description ;
}
/// <summary>
/// Holds the unique id of the bike;
/// </summary>
public string Id { get ; }
/// <summary>
/// Holds the count of wheels.
/// </summary>
public WheelType ? WheelType { get ; }
/// <summary>
/// Holds the type of bike.
/// </summary>
public TypeOfBike ? TypeOfBike { get ; }
2023-04-19 12:14:14 +02:00
/// <summary>
/// Gets whether bike is a AA bike (bike must be always returned a the same station) or AB bike (start and end stations can be different stations).
/// </summary>
public AaRideType ? AaRideType { get ; }
2022-09-06 16:08:19 +02:00
/// <summary> Gets the model of the lock. </summary>
public LockModel LockModel { get ; private set ; }
/// <summary> Holds the description of the bike. </summary>
public string Description { get ; }
/// <summary> Compares two bike object.</summary>
/// <param name="obj">Object to compare with.</param>
/// <returns>True if bikes are equal.</returns>
public override bool Equals ( object obj )
{
var l_oBike = obj as Bike ;
if ( l_oBike = = null )
{
return false ;
}
return Equals ( l_oBike ) ;
}
/// <summary> Converts the instance to text.</summary>
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 } " : " ")}." ;
}
/// <summary> Compares two bike object.</summary>
/// <param name="obj">Object to compare with.</param>
/// <returns>True if bikes are equal.</returns>
public bool Equals ( Bike other )
{
return other ! = null & &
Id = = other . Id & &
WheelType = = other . WheelType & &
TypeOfBike = = other . TypeOfBike
& & Description = = other . Description ;
}
/// <summary> Compares two bike object.</summary>
/// <param name="obj">Object to compare with.</param>
/// <returns>True if bikes are equal.</returns>
public static bool operator = = ( Bike bike1 , Bike bike2 )
{
return EqualityComparer < Bike > . Default . Equals ( bike1 , bike2 ) ;
}
/// <summary> Compares two bike object.</summary>
/// <param name="obj">Object to compare with.</param>
/// <returns>True if bikes are equal.</returns>
public static bool operator ! = ( Bike bike1 , Bike bike2 )
{
return ! ( bike1 = = bike2 ) ;
}
/// <summary>
/// Generates hash code for bike object.
/// </summary>
/// <returns></returns>
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 ;
}
}
2021-05-13 20:03:07 +02:00
}