using Furion;
using Microsoft.AspNetCore.DataProtection;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.AspNetCore.Mvc;
using Nirvana.Common;
using Serilog;
using System.Text;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Furion.DependencyInjection;
using System;
using Waste.Domain;

namespace Waste.OpenApi.Host
{
    public class Startup// : AppStartup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            var configuration = App.Configuration;




            services.AddControllers(options =>
            {
                options.EnableEndpointRouting = true;
            }).AddInject();


            #region 注入获取IP
            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
            MyHttpContext.serviceCollection = services;
            #endregion

        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            //启用 GB2312（按需）
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }


            // 或者更多配置
            // app.UseUnifyResultStatusCodes(options => { options.Return200StatusCodes = new [] { 401, 403 }; });
            //允许body重用
            app.Use(next => context =>
            {
                context.Request.EnableBuffering();
                return next(context);
            });

            app.UseStaticFiles();
            // 必须在 UseStaticFiles 和 UseRouting 之间,记录请求日志
            app.UseRouting();


            // app.UseAuthentication();
            app.UseAuthorization();

            app.UseInject();


            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                  name: "default",
                  pattern: "{controller=Home}/{action=Index}/{id?}");
            });
        }
    }

    public class CurrentUser : ICurrentUser, ITransient
    {
        public Guid? Id => null;
    }
}
