using Microsoft.Extensions.DependencyInjection; using Journal.Core.Repositories; using Journal.Core.Services; namespace Journal.Core; public static class ServiceCollectionExtensions { public static IServiceCollection AddFragmentServices(this IServiceCollection services) { services.AddSingleton(); services.AddSingleton(); services.AddTransient(); services.AddTransient(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(provider => { var config = provider.GetRequiredService().Current; if (!string.Equals(config.AiProvider, "python-sidecar", StringComparison.OrdinalIgnoreCase)) return new DisabledAiService(config.AiProvider); try { return new PythonSidecarAiService(config); } catch (Exception ex) { return new DisabledAiService( provider: "python-sidecar", message: $"Python AI sidecar unavailable: {ex.Message}", healthy: false); } }); services.AddSingleton(provider => { var config = provider.GetRequiredService().Current; try { return new PythonSidecarSpeechService(config); } catch (Exception ex) { return new DisabledSpeechBridgeService( provider: "python-sidecar", message: $"Python speech sidecar unavailable: {ex.Message}"); } }); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); return services; } }