using System; using TINK.Model.Bikes.Bike.BluetoothLock; namespace TINK.Model.Bike.BluetoothLock { public class LockInfoMutable : ILockInfoMutable { /// <summary> Lock info object. </summary> private LockInfo LockInfo { get; set; } /// <summary> Constructs a bluetooth lock info object. </summary> /// <param name="id">Id of lock must always been known when constructing an lock info object.</param> public LockInfoMutable( int id, Guid guid, byte[] userKey, byte[] adminKey, byte[] seed, LockingState state) { LockInfo = new LockInfo.Builder() { Id = id, Guid = guid, UserKey = userKey, AdminKey = adminKey, Seed = seed, State = state }.Build(); } public int Id => LockInfo.Id; /// <summary> Changes during runtime: Can be unknown when set from copri and chang to a valid value when set from lock.</summary> public Guid Guid { get => LockInfo.Guid; set => LockInfo = new LockInfo.Builder(LockInfo) { Guid = value }.Build(); } public byte[] Seed => LockInfo.Seed; public byte[] UserKey => LockInfo.UserKey; public byte[] AdminKey => LockInfo.AdminKey; public LockingState State { get => LockInfo.State; set => LockInfo = new LockInfo.Builder(LockInfo) { State = value }.Build(); } /// <summary> Holds the percentage of lock battery.</summary> public double BatteryPercentage { get; set; } = double.NaN; /// <summary> Loads lock info object from values. </summary> public void Load(int id, Guid guid, byte[] seed, byte[] userKey, byte[] adminKey) { LockInfo = new LockInfo.Builder(LockInfo) { Id = id, Guid = guid, Seed = seed, UserKey = userKey, AdminKey = adminKey}.Build(); } } }