using Creative.Configuration; using Creative.Security; using Creative.Services; var builder = WebApplication.CreateBuilder(args); // -------------------- // Container-friendly HTTP binding // -------------------- var port = Environment.GetEnvironmentVariable("PORT") ?? "8080"; builder.WebHost.UseUrls($"http://0.0.0.0:{port}"); // -------------------- // Configuration // -------------------- builder.Services.Configure( builder.Configuration.GetSection(CreativeConfig.SectionName)); var creativeConfig = builder.Configuration .GetSection(CreativeConfig.SectionName) .Get(); Console.WriteLine("==========================================="); Console.WriteLine("[Creative] Starting service..."); Console.WriteLine($"[Creative] Emulated Mode: {!(creativeConfig?.EnableRealApi ?? false)}"); Console.WriteLine($"[Creative] OpenAI Key Set: {!string.IsNullOrEmpty(creativeConfig?.OpenAiApiKey)}"); Console.WriteLine($"[Creative] Image Provider: {creativeConfig?.ImageProvider ?? "emulated"}"); Console.WriteLine($"[Creative] Unsplash Key Set: {!string.IsNullOrEmpty(creativeConfig?.UnsplashAccessKey)}"); Console.WriteLine($"[Creative] Internal Key Set: {!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("CREATIVE_INTERNAL_KEY"))}"); Console.WriteLine("==========================================="); // -------------------- // Services // -------------------- builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new() { Title = "Creative Service", Version = "v1" }); }); // Core services builder.Services.AddHttpClient(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddScoped(); // Auth filter for internal calls from Gateway builder.Services.AddScoped(); // -------------------- // Build & Configure // -------------------- var app = builder.Build(); app.UseSwagger(); app.UseSwaggerUI(); app.UseRouting(); app.MapControllers(); // Root endpoint app.MapGet("/", () => Results.Ok(new { service = "Creative", status = "healthy", timestamp = DateTimeOffset.UtcNow })); // Health check with config status app.MapGet("/health", (IConfiguration config) => { var settings = config.GetSection(CreativeConfig.SectionName).Get(); return Results.Ok(new { service = "Creative", status = "healthy", timestamp = DateTimeOffset.UtcNow, config = new { realApiEnabled = settings?.EnableRealApi ?? false, openAiConfigured = !string.IsNullOrEmpty(settings?.OpenAiApiKey), model = settings?.OpenAiModel ?? "(default)", imageProvider = settings?.ImageProvider ?? "emulated", unsplashConfigured = !string.IsNullOrEmpty(settings?.UnsplashAccessKey), imageCount = settings?.ImageCount ?? 3 } }); }); Console.WriteLine("[Creative] Pipeline configured, starting listener..."); Console.WriteLine($"[Creative] Listening on http://0.0.0.0:{port}"); app.Run();