using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.PlatformAbstractions;
using NSwag;
using NSwag.Generation.Processors.Security;
using System.Linq;

namespace StaffDBServer.SharedExtensions
{
    public static class ServiceSwaggerExtensions
    {
        public static void ConfigureSwagger(this IApplicationBuilder app)
        {
            app.UseSwaggerUi(cfg =>
            cfg.DocExpansion = "none" //"list"
            );
        }

        public static void ConfigureSwagger(this IServiceCollection services)
        {
            services.AddSwaggerDocument(config =>
            {
                #region add Bearer Authorization

                config.AddSecurity("JWT", Enumerable.Empty<string>(), new OpenApiSecurityScheme
                {
                    Type = OpenApiSecuritySchemeType.ApiKey,
                    Name = "Authorization",
                    In = OpenApiSecurityApiKeyLocation.Header,
                    Description = "Bearer JWT token."
                });

                config.OperationProcessors.Add(
                    new AspNetCoreOperationSecurityScopeProcessor("JWT"));

                #endregion add Bearer Authorization

                config.PostProcess = document =>
                {
                    document.Info.Version = "V." + PlatformServices.Default.Application.ApplicationVersion + "; " + PlatformServices.Default.Application.RuntimeFramework;
                    document.Info.Title = $" {PlatformServices.Default.Application.ApplicationName} API";
                    document.Info.Description = $" {PlatformServices.Default.Application.ApplicationName} Backend ";
                    document.Info.TermsOfService = "None";
                    document.Info.Contact = new NSwag.OpenApiContact
                    {
                        Name = "IT",
                        Email = string.Empty,
                        Url = "https://hensel-recycling.com"
                    };
                    document.Info.License = new NSwag.OpenApiLicense
                    {
                        Name = "Commercial License",
                        Url = "https://hensel-recycling.com"
                    };
                };
            });
        }
    }
}