using Altob.NtuInvoiceGateway.Middleware;
using Altob.NtuInvoiceGateway.Models;
using Serilog;

var builder = WebApplication.CreateBuilder(args);

builder.Host.UseSerilog((context, services, configuration) =>
{
    configuration
        .ReadFrom.Configuration(context.Configuration)
        .Enrich.FromLogContext()
        .Enrich.WithProperty("ServiceName", "NtuInvoiceGateway");
});

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddHttpClient();
builder.Services.AddMemoryCache();

// Configure company info
builder.Services.Configure<Altob.NtuInvoiceGateway.Models.CompanyInfo>(
    builder.Configuration.GetSection("CompanyInfo"));
builder.Services.Configure<Altob.NtuInvoiceGateway.Models.EndpointApiOptions>(
    builder.Configuration.GetSection("Endpoint"));
builder.Services.Configure<IpWhitelistOptions>(
    builder.Configuration.GetSection("IpWhitelist"));

var app = builder.Build();

try
{
    // Configure the HTTP request pipeline.
    if (!app.Environment.IsDevelopment())
    {
        app.UseExceptionHandler("/Error");
        // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
        app.UseHsts();
    }

    app.UseHttpsRedirection();

    app.UseRouting();

    app.UseMiddleware<IpWhitelistMiddleware>();

    app.UseAuthorization();

    app.MapStaticAssets();
    app.MapRazorPages()
        .WithStaticAssets();

    app.Run();
}
finally
{
    Log.CloseAndFlush();
}
