using System.Globalization;
using AspNetCore.SassCompiler;
using Blazorise;
using Blazorise.Icons.Material;
using Blazorise.Material;
using FoodsharingSiegen.Server;
using FoodsharingSiegen.Server.Auth;
using FoodsharingSiegen.Server.Data;
using FoodsharingSiegen.Server.Data.Service;
using FoodsharingSiegen.Server.Service;
using Microsoft.AspNetCore.Components.Authorization;
using Microsoft.EntityFrameworkCore;

var builder = WebApplication.CreateBuilder(args);
builder.LoadAppSettings();

builder.WebHost.UseUrls("http://+:8700");

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
builder.AddDatabaseContext();
#if DEBUG
builder.Services.AddSassCompiler();
#endif

// DI
builder.Services.AddScoped<LocalStorageService>();
builder.Services.AddScoped<AuthenticationStateProvider, TokenAuthStateProvider>();

builder.Services.AddScoped<FsContext>();
builder.Services.AddScoped<AuditService>();
builder.Services.AddScoped<AuthService>();
builder.Services.AddScoped<UserService>();
builder.Services.AddScoped<ProspectService>();
builder.Services.AddScoped<IMailService, MailService>();

builder.Services
    .AddBlazorise()
    .AddMaterialProviders()
    .AddMaterialIcons();

CultureInfo.DefaultThreadCurrentCulture = new("de-DE");

var app = builder.Build();
app.ApplyMigrations();

// 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.UseStaticFiles();

app.UseRouting();

app.MapBlazorHub();
app.MapFallbackToPage("/_Host");

app.Run();