using Microsoft.AspNetCore.OData; // Metoda rozszerzająca AddOData.
using Packt.Shared; // Metoda rozszerzająca AddNorthwindContext.

var builder = WebApplication.CreateBuilder(args);

// Dodanie usług do kontenera.

builder.Services.AddNorthwindContext();

builder.Services.AddControllers()
  .AddOData(options => options
    // Rejestracja modeli OData.
    .AddRouteComponents(routePrefix: "catalog",
      model: GetEdmModelForCatalog())

    .AddRouteComponents(routePrefix: "ordersystem",
      model: GetEdmModelForOrderSystem())

    .AddRouteComponents(routePrefix: "catalog/v{version}",
      model: GetEdmModelForCatalog())

    // Ustawienie opcji zapytań.
    .Select() // Włączenie $select na potrzeby projekcji.
    .Expand() // Włączenie $expand na potrzeby nawigacji do powiązanych jednostek.
    .Filter() // Włączenie $filter na potrzeby filtrowania.
    .OrderBy() // Włączenie $orderby na potrzeby sortowania.
    .SetMaxTop(100) // Włączenie $top na potrzeby wyszukiwania maksymalnych wartości.
    .Count() // Włączenie $count na potrzeby zliczania.
  );

// Więcej o konfigurowaniu Swagger/OpenAPI dowiesz się na stronie https://aka.ms/aspnetcore/swashbuckle.
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Konfiguracja potoku zapytań HTTP.
if (app.Environment.IsDevelopment())
{
  app.UseSwagger();
  app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();
