using ManagerService.Data;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
namespace ManagerService.Services
{
///
/// Lecture et écriture des morceaux de contenu indexés pour le guide IA.
///
public interface IVectorStoreService
{
///
/// Remplace tous les morceaux d'un contenu. Le nombre de morceaux change d'une version
/// à l'autre : mettre à jour morceau par morceau laisserait des fantômes qui continueraient
/// d'alimenter les réponses avec du contenu supprimé. Une liste vide purge le contenu.
///
Task ReplaceAsync(string instanceId, string configurationId, string contentId,
ContentSourceType contentType, IReadOnlyList chunks,
CancellationToken cancellationToken = default);
///
/// Cherche les morceaux les plus proches de la question.
/// Le seul filtre dur est l'instance. La langue ne filtre pas — un visiteur néerlandophone
/// doit retrouver une brochure qui n'existe qu'en français : le modèle d'embedding est
/// multilingue et la traduction se fait à la rédaction de la réponse.
/// et ne servent
/// qu'à bonifier le classement.
/// null retombe sur AI:SearchTopK.
///
Task> SearchAsync(string instanceId, string currentConfigurationId,
string language, string query, int? topK = null,
CancellationToken cancellationToken = default);
Task DeleteAsync(string contentId, ContentSourceType contentType,
CancellationToken cancellationToken = default);
}
public record ContentChunk(string Text, int ChunkIndex, int? PageNumber, string Language);
public record VectorSearchResult(
string ContentId,
ContentSourceType ContentType,
string Text,
int? PageNumber,
string Language,
double Score);
}