using System;
using Autofac;
using Nitride.Commands;
using Nitride.Temporal.Cli;
using Serilog;
using Expires = Nitride.Temporal.Cli.ExpiresPipelineCommandOption;
namespace Nitride.Temporal;
public static class NitrideTemporalBuilderExtensions
{
///
/// Extends the builder to allow for configuring the temporal
/// settings for generation.
///
public static NitrideBuilder UseTemporal(
this NitrideBuilder builder,
Action? configure = null)
{
// Get the configuration so we can set the various options.
var config = new NitrideTemporalConfiguration();
configure?.Invoke(config);
// Add in the module registration.
builder.ConfigureContainer(
x =>
{
// Register the module.
x.RegisterModule();
// Add in the CLI options.
if (config.AddDateOptionToCommandLine)
{
x.RegisterType().As();
}
if (config.AddExpireOptionToCommandLine && config.Expiration != null)
{
x.Register(
context =>
{
ILogger logger = context.Resolve();
Timekeeper clock = context.Resolve();
return new Expires(logger, clock, config.Expiration);
})
.As();
}
});
if (config.DateTimeZone != null)
{
builder.ConfigureSite(
(_, scope) =>
{
ILogger logger = scope.Resolve();
Timekeeper timekeeper = scope.Resolve();
timekeeper.DateTimeZone = config.DateTimeZone;
logger.Information("Setting time zone to {Zone}", timekeeper.DateTimeZone);
});
}
return builder;
}
}