using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Infrastructure;
using Infrastructure.Filters;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace Api
{
  public class Startup
  {
    // This method gets called by the runtime. Use this method to add services to the container.
    // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
    public void ConfigureServices(IServiceCollection services)
    {
      services.AddHNServicesInMemory();
      services.AddControllers(options =>
      {
        options.Filters.Add<CustomExceptionFilter>();
      });
      services.AddOpenApiDocument(doc =>
      {
        doc.PostProcess = od =>
        {
          od.Info.Title = "Hacker News Clone API";
        };
      });
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
      app.UseOpenApi();

      if (env.IsDevelopment())
      {
        app.UseDeveloperExceptionPage();
      }

      app.UseSwaggerUi3();
      //   app.UseReDoc();

      app.UseCors(o =>
      {
        // o.WithOrigins("http://mon.site.web");
        o.AllowAnyMethod();
        o.AllowAnyOrigin();
        o.AllowAnyHeader();
      });

      app.UseRouting();

      app.UseEndpoints(endpoints =>
      {
        endpoints.MapGet("/", async context =>
              {
                await context.Response.WriteAsync("Hello World!");
              });
        endpoints.MapControllers();
      });
    }
  }
}
