using Serilog; namespace TINK.Model.Bikes.BikeInfoNS.DriveNS.BatteryNS { public class Battery : IBattery { private Battery() { } /// /// Holds the current charging level of the battery in percent, double.NaN if unknown. /// public double CurrentChargePercent { get; private set; } = double.NaN; /// /// Holds the current charging level of the battery in bars, null if unknown. /// public int? CurrentChargeBars { get; private set; } = null; /// /// Holds the maximum charging level of the battery in bars, null if unknown. /// public int? MaxChargeBars { get; private set; } = null; /// /// Holds whether backend is aware of battery charging level. /// public bool? IsBackendAccessible { get; private set; } = null; /// /// Holds whether to display battery level or not. /// public bool? IsHidden { get; private set; } = null; public class Builder { /// /// Holds the current charging level of the battery in bars. /// public int? CurrentChargeBars { get; set; } = null; /// /// Holds the maximum charging level of the battery in bars. /// public int? MaxChargeBars { get; set; } = null; /// /// Holds the current charging level of the battery in percent. /// public double CurrentChargePercent { get; set; } = double.NaN; /// /// Holds whether backend is aware of battery charging level. /// public bool? IsBackendAccessible { get; set; } = null; /// /// Holds whether to display battery level or not. /// public bool? IsHidden { get; set; } = null; public Battery Build() { if (!double.IsNaN(CurrentChargePercent) && (CurrentChargePercent < 0 || 100 < CurrentChargePercent)) { // Invalid filling level detected CurrentChargePercent = double.NaN; } if (CurrentChargeBars < 0) { // Current value of bars must never be smaller zero. CurrentChargeBars = null; } if (MaxChargeBars < 0) { // Max value of bars must never be smaller zero. MaxChargeBars = null; } if (CurrentChargeBars != null && MaxChargeBars == null) { // If current charge bars is set, max charge must be set as well. Log.ForContext().Error($"Current bars value can not be set to {CurrentChargeBars} if max bars is not set."); CurrentChargeBars = null; } if (CurrentChargeBars != null && MaxChargeBars != null && CurrentChargeBars > MaxChargeBars) { // If current charge bars must never be larger than max charge bars. Log.ForContext().Error($"Invalid current bars value {CurrentChargeBars} detected. Value must never be larger than max value bars {MaxChargeBars}."); CurrentChargeBars = null; } return new Battery { CurrentChargeBars = CurrentChargeBars, MaxChargeBars = MaxChargeBars, CurrentChargePercent = CurrentChargePercent, IsBackendAccessible = IsBackendAccessible, IsHidden = IsHidden }; } } } }