using System.Reflection;
using Microsoft.OpenApi;

namespace eSuite.API.Swagger;

internal static class SwaggerExtension
{
    /// <summary>
    /// Adds support for Swagger documentation.
    /// </summary>
    /// <param name="builder"></param>
    public static void AddSwagger(this WebApplicationBuilder builder)
    {
        // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
        builder.Services.AddEndpointsApiExplorer();
        builder.Services.AddSwaggerGen(options =>
            {
                {
                    options.SwaggerDoc("v1", new OpenApiInfo
                    {
                        Version = "v1",
                        Title = "e-suite API",
                        Description = "The RESTful Web API for e-suite",
                        //TermsOfService = new Uri("https://example.com/terms"),
                        //Contact = new OpenApiContact
                        //{
                        //    Name = "Example Contact",
                        //    Url = new Uri("https://example.com/contact")
                        //},
                        //License = new OpenApiLicense
                        //{
                        //    Name = "License",
                        //    Url = new Uri("https://example.com/license")
                        //}
                    });

                    options.OperationFilter<HasAllowAnonymousOperationsFilter>();

                    options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
                    {
                        In = ParameterLocation.Header,
                        Description = "Please insert JWT with \"Bearer <token>\" into field",
                        Name = "Authorization",
                        Type = SecuritySchemeType.ApiKey,
                        BearerFormat = "Bearer JWT"
                    });
                }

                var xmlFilename = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
                options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFilename));
            }
        );
    }
}