using System;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Wino.Core.Domain.Interfaces;
namespace Wino.Core.Services;
///
/// Service responsible for initializing the SynchronizationManager during app startup.
///
public class SynchronizationManagerInitializer : IInitializeAsync
{
private readonly IServiceProvider _serviceProvider;
public SynchronizationManagerInitializer(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public async Task InitializeAsync()
{
var synchronizerFactory = _serviceProvider.GetRequiredService();
var imapTestService = _serviceProvider.GetRequiredService();
var accountService = _serviceProvider.GetRequiredService();
var authenticationProvider = _serviceProvider.GetRequiredService();
var notificationBuilder = _serviceProvider.GetRequiredService();
// Cast to concrete type to access CreateNewSynchronizer method
var concreteSynchronizerFactory = synchronizerFactory as SynchronizerFactory;
await SynchronizationManager.Instance.InitializeAsync(concreteSynchronizerFactory, imapTestService, accountService, notificationBuilder, authenticationProvider);
}
}