using HRD.AppLogger;
using HRD.LDAPService.JWT;
using HRD.WebApi.DAL.Middleware;
using HRD.WebApi.Helpers;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Server.IISIntegration;
using Microsoft.Extensions.DependencyInjection;

namespace StaffDBServer.SharedExtensions
{
    public static class ServiceExtensions
    {
        public static void ConfigureWebApiExtensionsAtFirst(this IServiceCollection services)
        {
            //services.AddCors();
            services.AddCustomCors("AllowAllOrigins");

            services.Configure<IISOptions>(options =>
            {
                options.AuthenticationDisplayName = "Windows";
                options.ForwardClientCertificate = true;
                options.AutomaticAuthentication = true;
            });
            services.AddAuthentication(IISDefaults.AuthenticationScheme);

            services.ConfigureJWT(Extends.JwtMiddlewareOptionsHelper.GetJwtMiddlewareOptions()); ;

            services.ConfigureDAL(WebApiMiddlewareOptionsHelper.GetWebApiMiddlewareOptions());

            services.AddSingleton<ILoggerManager, LoggerManager>();

            services.ConfigureSwagger();
        }

        public static void ConfigureWebApiExtensionsEnd(this IServiceCollection services)
        {
            services.AddMvc()
                .ConfigureApiBehaviorOptions(options =>
                {
                    options.InvalidModelStateResponseFactory = context =>
                    {
                        var errors = new HRD.WebApi.Helpers.HttpErrorDetails(context);
                        return new BadRequestObjectResult(errors);
                    };
                });
        }
    }
}