using ChatRAG.Models;
namespace ChatRAG.Services.Contracts
{
///
/// Interface unificada para operações de documentos de texto.
/// Permite alternar entre MongoDB, Qdrant, ou outros providers sem quebrar código.
///
public interface ITextDataService
{
// ========================================
// MÉTODOS ORIGINAIS (compatibilidade com TextData.cs atual)
// ========================================
///
/// Salva texto no banco (método original do seu TextData.cs)
///
/// Título do documento
/// Conteúdo do documento
/// ID do projeto
Task SalvarNoMongoDB(string titulo, string texto, string projectId);
///
/// Salva ou atualiza texto com ID específico (método original)
///
/// ID do documento (null para criar novo)
/// Título do documento
/// Conteúdo do documento
/// ID do projeto
Task SalvarNoMongoDB(string? id, string titulo, string texto, string projectId);
///
/// Processa texto completo dividindo por seções (método original)
///
/// Texto com divisões marcadas por **
/// ID do projeto
Task SalvarTextoComEmbeddingNoMongoDB(string textoCompleto, string projectId);
///
/// Recupera todos os documentos (método original)
///
/// Lista de todos os documentos
Task> GetAll();
///
/// Recupera documentos por projeto (método original)
///
/// ID do projeto
/// Lista de documentos do projeto
Task> GetByPorjectId(string projectId);
///
/// Recupera documento por ID (método original)
///
/// ID do documento
/// Documento ou null se não encontrado
Task GetById(string id);
// ========================================
// MÉTODOS NOVOS (interface moderna e unificada)
// ========================================
///
/// Salva documento usando modelo unificado
///
/// Dados do documento
/// ID do documento criado
Task SaveDocumentAsync(DocumentInput document);
///
/// Atualiza documento existente
///
/// ID do documento
/// Novos dados do documento
Task UpdateDocumentAsync(string id, DocumentInput document);
///
/// Remove documento
///
/// ID do documento
Task DeleteDocumentAsync(string id);
///
/// Verifica se documento existe
///
/// ID do documento
/// True se existe, False caso contrário
Task DocumentExistsAsync(string id);
///
/// Recupera documento por ID (formato moderno)
///
/// ID do documento
/// Documento ou null se não encontrado
Task GetDocumentAsync(string id);
///
/// Lista documentos por projeto (formato moderno)
///
/// ID do projeto
/// Lista de documentos do projeto
Task> GetDocumentsByProjectAsync(string projectId);
///
/// Conta documentos
///
/// Filtrar por projeto (opcional)
/// Número de documentos
Task GetDocumentCountAsync(string? projectId = null);
// ========================================
// OPERAÇÕES EM LOTE
// ========================================
///
/// Salva múltiplos documentos de uma vez
///
/// Lista de documentos
/// Lista de IDs dos documentos criados
Task> SaveDocumentsBatchAsync(List documents);
///
/// Remove múltiplos documentos de uma vez
///
/// Lista de IDs para remover
Task DeleteDocumentsBatchAsync(List ids);
// ========================================
// INFORMAÇÕES DO PROVIDER
// ========================================
///
/// Nome do provider (MongoDB, Qdrant, etc.)
///
string ProviderName { get; }
///
/// Estatísticas e métricas do provider
///
/// Informações sobre performance, saúde, etc.
Task> GetProviderStatsAsync();
}
}