using System.Diagnostics;

using HttpClientStudy.Core.Utils;

//启动WebApi程序
StartupUtility.StartWebApiProject();

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseAuthorization();

app.MapControllers();

#region 退出时,关闭WebAPI进程
/*
 * 1、退出执行机制,本身不太可靠,只有正常退出时才执行。
 * 2、正常退出,比如 ctl+c 操作
 * 3、非正常退出:比如 程序崩溃、内存泄漏、关闭进程,特别是调试WebAPI时,如果启动时打开了浏览器,则关闭浏览器时退出属于异常退出。
 */

// 获取 IHostApplicationLifetime 实例
var applicationLifetime = app.Services.GetRequiredService<IHostApplicationLifetime>();

// 注册应用程序停止事件:关闭WebApi
applicationLifetime.ApplicationStopping.Register(() =>
{
    //注意:在 Visual Studio 2022 预览版中,执行时异常;正式版中正常。应该是预案版的Bug
    StartupUtility.ExitWebApiProject();
});

applicationLifetime.ApplicationStopped.Register(() =>
{
    Console.WriteLine("程序已停止");
});

#endregion

app.Run();