using OpcPks.Core.Services;
using OpcPks.Core.Models;

var builder = WebApplication.CreateBuilder(args);

// -----------------------------------------------------------
// 1. 공통 경로 설정
// -----------------------------------------------------------
string baseDataPath = "/home/pacer/projects/OpcPksPlatform/OpcPks.Core/Data";

// -----------------------------------------------------------
// 2. 서비스 등록 (Dependency Injection)
// -----------------------------------------------------------
builder.Services.AddControllersWithViews();

// [수정] OpcSessionManager를 먼저 등록해야 Generator에서 가져다 쓸 수 있습니다.
builder.Services.AddSingleton<OpcSessionManager>();

// [수정] 팩토리 메서드를 사용하여 OpcSessionManager를 주입(Injection)합니다.
builder.Services.AddSingleton<CertificateGenerator>(sp => 
{
    var sessionManager = sp.GetRequiredService<OpcSessionManager>();
    return new CertificateGenerator(baseDataPath, sessionManager);
});

var app = builder.Build();

// -----------------------------------------------------------
// 3. 실행 환경 설정
// -----------------------------------------------------------
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    app.UseHsts();
}

// -----------------------------------------------------------
// 4. 미들웨어 및 라우팅 설정
// -----------------------------------------------------------
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();

// 컨트롤러 루트 매핑
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

// [이미지: ASP.NET Core Dependency Injection Container flow]


// -----------------------------------------------------------
// 5. 서버 가동
// -----------------------------------------------------------
Console.WriteLine("🚀 OpcPksPlatform 서버 대기 중... (http://0.0.0.0:5000)");
Console.WriteLine("💡 사용자가 '인증서 생성' 버튼을 누를 때까지 대기합니다.");

app.Run();