using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
namespace TINK.Services.BluetoothLock
{
/// Manages Locks services and related configuration parameter.
public class LocksServicesContainerMutable : IEnumerable
{
/// Manages the different types of LocksService objects.
private ServicesContainerMutable LocksServices { get; }
/// Holds the name of the default locks service to use.
public static string DefaultLocksservice => typeof(BLE.LockItByScanServicePolling).FullName;
///
/// Name of active lock service implementation to use.
/// Null for production (set of lock service implentations and some fake implementation will created) hash set of services for testing purposes.
public LocksServicesContainerMutable(
string activeLockService,
HashSet locksServices)
{
LocksServices = new ServicesContainerMutable(
locksServices,
activeLockService);
}
/// Active locks service.
public ILocksService Active => LocksServices.Active;
/// Sets a lock service as active locks service by name.
/// Name of the new locks service.
public void SetActive(string active) => LocksServices.SetActive(active);
IEnumerator IEnumerable.GetEnumerator()
=> LocksServices.Select(x => x.GetType().FullName).GetEnumerator();
IEnumerator IEnumerable.GetEnumerator()
=> LocksServices.GetEnumerator();
public void SetTimeOut(TimeSpan connectTimeout)
{
foreach (var locksService in LocksServices)
{
locksService.TimeOut = new TimeOutProvider(new List { connectTimeout });
}
}
}
}