namespace ROLAC.API.Services.Ai; /// Selects the active category-AI provider per request from ChurchProfile.AiProvider. public interface IExpenseCategoryAiServiceFactory { Task ResolveAsync(CancellationToken ct = default); } public sealed class ExpenseCategoryAiServiceFactory : IExpenseCategoryAiServiceFactory { private readonly IChurchAiConfigProvider _config; private readonly ClaudeExpenseCategoryAiService _claude; private readonly GeminiExpenseCategoryAiService _gemini; public ExpenseCategoryAiServiceFactory( IChurchAiConfigProvider config, ClaudeExpenseCategoryAiService claude, GeminiExpenseCategoryAiService gemini) { _config = config; _claude = claude; _gemini = gemini; } public async Task ResolveAsync(CancellationToken ct = default) { var cfg = await _config.GetAsync(ct); return cfg.Provider.Equals("Gemini", StringComparison.OrdinalIgnoreCase) ? _gemini : _claude; } }