using ChatApi.Data; using ChatRAG.Contracts.VectorSearch; using ChatRAG.Services.Contracts; using ChatRAG.Services.ResponseService; using ChatRAG.Services.TextServices; using ChatRAG.Settings.ChatRAG.Configuration; using Microsoft.Extensions.Options; namespace ChatRAG.Services.SearchVectors { public class VectorDatabaseFactory : IVectorDatabaseFactory { private readonly IServiceProvider _serviceProvider; private readonly VectorDatabaseSettings _settings; private readonly ILogger _logger; public VectorDatabaseFactory( IServiceProvider serviceProvider, IOptions settings, ILogger logger) { _serviceProvider = serviceProvider; _settings = settings.Value; _logger = logger; } public string GetActiveProvider() { return _settings.Provider; } public IVectorSearchService CreateVectorSearchService() { _logger.LogInformation("Criando VectorSearchService para provider: {Provider}", _settings.Provider); return _settings.Provider.ToLower() switch { "qdrant" => GetService(), "mongodb" => GetService(), "chroma" => GetService(), _ => throw new ArgumentException($"Provider de VectorSearch não suportado: {_settings.Provider}") }; } private T GetService() where T : class { var service = _serviceProvider.GetService(); if (service == null) { throw new InvalidOperationException($"Serviço {typeof(T).Name} não está registrado no DI container"); } return service; } } }