using Ladaer.BackEnd.Infrastructures.Services;

namespace Ladaer.BackEnd.Infrastructures.Startup
{
    /// <summary>
    /// Dịch vụ khởi động được lưu trữ.
    /// </summary>
    public class StartupHostedService : IHostedService
    {
        private readonly IServiceProvider _serviceProvider;

        /// <summary>
        /// Khởi tạo một thể hiện của <see cref="StartupHostedService"/>.
        /// </summary>
        /// <param name="serviceProvider">Đối tượng IServiceProvider.</param>
        public StartupHostedService(IServiceProvider serviceProvider)
        {
            _serviceProvider = serviceProvider;
        }

        /// <summary>
        /// Phương thức được gọi khi dịch vụ khởi động.
        /// </summary>
        /// <param name="cancellationToken">Đối tượng CancellationToken.</param>
        /// <returns>Nhiệm vụ không đồng bộ.</returns>
        public async Task StartAsync(CancellationToken cancellationToken)
        {
            using (var scope = _serviceProvider.CreateScope())
            {
                var appConfigService = scope.ServiceProvider.GetRequiredService<IAppConfigService>();
                await appConfigService.LoadConfigsToCacheAsync();
            }
        }

        /// <summary>
        /// Phương thức được gọi khi dịch vụ dừng.
        /// </summary>
        /// <param name="cancellationToken">Đối tượng CancellationToken.</param>
        /// <returns>Nhiệm vụ hoàn thành.</returns>
        public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask;
    }
}
