using Aucma.Core.PrintTo.Views;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Windows;
using Microsoft.Extensions.Configuration;
using System.IO;
using Microsoft.Extensions.Logging;
using Autofac.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Hosting;
using Admin.Core.Common;
using System.Threading;

namespace Aucma.Core.PrintTo
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        public static IServiceProvider ServiceProvider;

        protected override async void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
            var host = CreateHostBuilder(e.Args).Build();//生成宿主。

            ServiceProvider = host.Services;

            try
            {
                var loginWindow = host.Services.GetRequiredService<LoginPageView>();
                if (loginWindow != null && !loginWindow.IsActive)
                {
                    loginWindow.Show();
                    await host.StartAsync();
                }
                else
                {
                    // 处理窗口已关闭的情况
                    // 可以选择重新创建主窗口或者退出应用程序
                    Application.Current.Shutdown();
                }
            }
            catch (Exception ex)
            {
                Application.Current.Shutdown();
            }
        }

        /// <summary>
        /// CreateHostBuilder
        /// </summary>
        /// <param name="args"></param>
        /// <returns></returns>
        public static IHostBuilder CreateHostBuilder(string[] args)
        {
            //初始化默认主机Builder
            var hostBuilder = Host.CreateDefaultBuilder(args)
                //Autofac服务工厂
                .UseServiceProviderFactory(new AutofacServiceProviderFactory())
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                    webBuilder.UseUrls("http://localhost:5300/");//因为引用了web 框架 ,开启多个程序,需要指定端口
                })
                .ConfigureLogging((hostingContext, builder) =>
                {
                    //清楚控制台log日志
                    builder.ClearProviders();
                    // 1.过滤掉系统默认的一些日志
                    builder.AddFilter("System", LogLevel.Error);
                    builder.AddFilter("Microsoft", LogLevel.Error);

                    // 默认log4net.confg
                    builder.AddLog4Net(Path.Combine(Directory.GetCurrentDirectory(), "Log4net.config"));
                });

            return hostBuilder;
        }

    }
}