using Connected.Middleware;
using Connected.Security.Authentication.Middleware;
using Connected.Threading;
namespace Connected.Security.Authentication;
/// 
/// The implementation of the .
/// 
internal sealed class AuthenticationService : IAuthenticationService
{
	public AuthenticationService(IMiddlewareService middleware)
	{
		Provider = new AsyncLazy(middleware.First());
	}
	private AsyncLazy Provider { get; }
	public async Task Authenticate(AuthenticationArgs args)
	{
		var provider = await Provider.Value;
		if (provider is null)
			throw new NullReferenceException(nameof(IAuthenticationMiddleware));
		return await provider.Authenticate(args);
	}
}