using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Mvc.Razor;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Nop.Core.Infrastructure;

namespace Nop.Plugin.Misc.MangoCore.Infrastructure;

public class PluginNopStartup : INopStartup
{
    /// <summary>
    /// Add and configure any of the middleware
    /// </summary>
    /// <param name="services">Collection of service descriptors</param>
    /// <param name="configuration">Configuration of the application</param>
    public void ConfigureServices(IServiceCollection services, IConfiguration configuration)
    {
        services.Configure<RazorViewEngineOptions>(options =>
        {
            options.ViewLocationExpanders.Add(new ViewLocationExpander());
        });

        services.AddCors(feature =>
            feature.AddPolicy(
                "AllowBlazorClient",
                apiPolicy => apiPolicy
                    .WithOrigins("https://localhost:7144", "https://measurementtest.fruitbank.hu", "https://localhost:60589", "http://localhost:5000", "https://localhost:59579", "https://app.fruitbank.hu")
                    .AllowAnyHeader()
                    .AllowAnyMethod()
                    .AllowCredentials()
            ));

        //register services and interfaces
        //services.AddScoped<CustomModelFactory, ICustomerModelFactory>();
    }

    /// <summary>
    /// Configure the using of added middleware
    /// </summary>
    /// <param name="application">Builder for configuring an application's request pipeline</param>
    public void Configure(IApplicationBuilder application)
    {

        //application.UseWhen(context => context.Request.Path.StartsWithSegments("/fbhub"), app =>
        //{
        //    app.UseCors("AllowBlazorClient");
        //    app.UseRouting();
        //    //app.UseEndpoints(endpoints =>
        //    //{
        //    //    endpoints.MapHub<FruitBankHub>("/fbhub");
        //    //});
        //});

        var fruitBankHubEndPoint = "/fbHub";// $"/{FruitBankConstClient.DefaultHubName}";
        application.UseWhen(context => context.Request.Path.StartsWithSegments(fruitBankHubEndPoint), app =>
        {
            app.UseCors("AllowBlazorClient");
            app.UseRouting();
        });

        var loggrHubEndPoint = "/loggerHub";//$"/{FruitBankConstClient.LoggerHubName}";
        application.UseWhen(context => context.Request.Path.StartsWithSegments(loggrHubEndPoint), app =>
        {
            app.UseCors("AllowBlazorClient");
            app.UseRouting();
        });
    }

    /// <summary>
    /// Gets order of this startup configuration implementation
    /// </summary>
    public int Order => 100;
}