using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using PARR.DAL.Context;
using PARR.Domain.Settings;

namespace PARR.DAL.Configurations.DbSettings
{
    internal class DBConfigurationProvider : ConfigurationProvider
    {
        private readonly IServiceCollection services;

        public DBConfigurationProvider(IServiceCollection services)
        {
            this.services = services;
        }

        public override void Load()
        {
            using (var dataContext = services.BuildServiceProvider().GetService<DataContext>())
            {
                //если миграциями БД еще не создана, то SettingsInDbs будет недоступна
                try
                {
                    var settings = dataContext?.Setting.AsNoTracking().ToList();

                    if (settings == null)
                        return;

                    if (settings != null)
                    {
                        //формируем список с корневым SettingsFromDb, и в него вложены дочерние настройки из БД, чтобы потом забиндить в класс
                        Data = settings.ToDictionary(settings => $"{nameof(SettingsFromDb)}:{settings.Name}", settings => (string?)settings.Value);
                    }
                }
                catch (Exception ex)
                {
                    //TODO: логи, я не тестил, возможно надо через BuildServiceProvider прокинуть ILogger
                }
            }
        }
    }
}
