using Admin.Core.Common;
using Admin.Core.Extensions;
using Admin.Core.IRepository;
using Admin.Core.IService;
using Admin.Core.IService.ISys;
using Admin.Core.Model;
using Admin.Core.Repository;
using Admin.Core.Service;
using Admin.Core.Tasks;
using Autofac;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System.Text;

namespace Aucma.Core.PrintTo
{
    /// <summary>
    /// Startup
    /// </summary>
    public class Startup
    {
        /// <summary>
        /// Startup
        /// </summary>
        /// <param name="configuration"></param>
        public Startup(IConfiguration configuration, IWebHostEnvironment env)
        {
            Configuration = configuration;
            Env = env;
        }

        /// <summary>
        /// IConfiguration
        /// </summary>
        public IConfiguration Configuration { get; }
        /// <summary>
        /// »·¾³ÐÅÏ¢£º¿ª·¢/Éú²ú
        /// </summary>
        public IWebHostEnvironment Env { get; }

        /// <summary>
        /// This method gets called by the runtime. Use this method to add services to the container.
        /// </summary>
        /// <param name="services"></param>
        public void ConfigureServices(IServiceCollection services)
        {
            //Appsettings
            services.AddSingleton(new Appsettings(Configuration));
            //ÈÕÖ¾ÎļþĿ¼
            services.AddSingleton(new LogLock(Env.ContentRootPath));
            //Memory»º´æ
            services.AddMemoryCacheSetup();
            //SqlsugarÊý¾Ý¿âÄ£ÐͲéѯ
            services.AddSqlsugarSetup();
            //AutoMapper
            services.AddAutoMapperSetup();

            //Ö§³Ö±àÂë´óÈ« ÀýÈç:Ö§³Ö System.Text.Encoding.GetEncoding("GB2312")  System.Text.Encoding.GetEncoding("GB18030") 
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
        }


        /// <summary>
        /// ×¢ÒâÔÚProgram.CreateHostBuilder£¬Ìí¼ÓAutofac·þÎñ¹¤³§
        /// </summary>
        /// <param name="builder"></param>
        public void ConfigureContainer(ContainerBuilder builder)
        {
            builder.RegisterModule(new AutofacModuleRegister());
            builder.RegisterModule<AutofacPropertityModuleReg>();
        }

        /// <summary>
        /// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        /// </summary>
        /// <param name="app"></param>
        /// <param name="env"></param>
        public void Configure(IApplicationBuilder app)
        {
            // ʹÓþ²Ì¬Îļþ
            app.UseStaticFiles();
        }
    }
}