using Elastic.CommonSchema.Serilog;
using PARR.NextRun;
using PARR.NextRunWorker;
using Serilog;

var builder = Host.CreateApplicationBuilder();

builder.Services.AddLogging(config =>
{
    config.ClearProviders();

    var logger = new LoggerConfiguration();

    if (builder.Environment.IsProduction())
        logger.WriteTo.Console(new EcsTextFormatter());
    else
        logger.WriteTo.Console();

    logger.ReadFrom.Configuration(builder.Configuration);

    config.AddSerilog(logger.CreateLogger());
});

builder.Services.InstallNextRunServices(builder.Configuration);
builder.Configuration.AddNextRunConfigurations(builder.Services);
builder.Services.AddNextRunSettings(builder.Configuration);

// Задается через переменные окружеия
var runRabbit = builder.Configuration.GetValue<bool>("ENABLE_RABBIT", true);
var runInterval = builder.Configuration.GetValue<bool>("ENABLE_INTERVAL", true);

if (runRabbit)
{
    builder.Services.AddHostedService<RabbitWorker>();
}

if (runInterval)
{
    builder.Services.AddHostedService<IntervalWorker>();
}

// Настройка краша при ошибке. Если хоть один из воркеров упадет, то падает целиком проект
builder.Services.Configure<HostOptions>(options =>
{
    options.BackgroundServiceExceptionBehavior = BackgroundServiceExceptionBehavior.StopHost;
});

var host = builder.Build();
host.Run();

