using Serilog;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using Serilog.Sinks.RollingFile;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.DependencyInjection;
using solarApp.Service;
using Microsoft.Extensions.Logging;

namespace solarApp
{
    static class Program
    {
        /// <summary>
        ///  The main entry point for the application.
        ///  log ref: https://www.thecodebuzz.com/file-logging-in-windows-form-application-using-serilog/
        /// </summary>
        [STAThread]
        static void Main()
        {
            // Application.SetHighDpiMode(HighDpiMode.SystemAware);
            // Application.EnableVisualStyles();
            // Application.SetCompatibleTextRenderingDefault(false);

            // ///Generate Host Builder and Register the Services for DI
            // var builder = new HostBuilder()
            //    .ConfigureServices((hostContext, services) =>
            //    {
            //        services.AddScoped<fmArchive>();
            //        services.AddScoped<procArchiveHourly>();
            //        //services.AddScoped<IBusinessLayer, BusinessLayer>();
            //        //services.AddSingleton<IDataAccessLayer, CDataAccessLayer>();


            ////Add Serilog
            //var serilogLogger = new LoggerConfiguration()
            //        .WriteTo.File("app_log.txt")
            //        .CreateLogger();
            //        services.AddLogging(x =>
            //        {
            //            x.SetMinimumLevel(LogLevel.Information);
            //            x.AddSerilog(logger: serilogLogger, dispose: true);
            //        });

            //    });

            // var host = builder.Build();

            // using (var serviceScope = host.Services.CreateScope())
            // {
            //     var services = serviceScope.ServiceProvider;
            //     try
            //     {
            //         var form1 = services.GetRequiredService<fmArchive>();
            //         Application.Run(form1);

            //         Console.WriteLine("Success");
            //     }
            //     catch (Exception ex)
            //     {
            //         Console.WriteLine("Error Occured");
            //     }
            // }
            Log.Logger = new LoggerConfiguration()
                .MinimumLevel.Verbose() // 設定最低顯示層級   預設: Information
                .WriteTo.File("Logs/solarApp/log-.log",
                    rollingInterval: RollingInterval.Day, // 每天一個檔案
                    outputTemplate: "{Timestamp:HH:mm:ss} [{Level:u5}] {Message:lj}{NewLine}{Exception}"
                ) // 輸出到檔案 檔名範例: log-20211005.log
                .CreateLogger();

            Application.SetHighDpiMode(HighDpiMode.SystemAware);
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            //Application.Run(new fmExcel());
            Application.Run(new fmArchive());

            //Application.Run(new fmTest());
            //Application.Run(new fmMain());

            Log.CloseAndFlush();
        }
    }
}
