using System;
using Pgvector;
namespace ManagerService.Data
{
///
/// Un morceau de contenu indexé pour la recherche sémantique du guide IA.
/// Un contenu produit N lignes : une par morceau et par langue.
///
public class ContentEmbedding
{
/// Dimension du vecteur, imposée par le modèle d'embedding (gemini-embedding-001).
public const int Dimensions = 768;
public long Id { get; set; }
/// Client propriétaire. Filtre strict à la recherche : jamais de résultat d'une autre instance.
public string InstanceId { get; set; }
///
/// Configuration d'origine, null pour une ressource (Resource n'appartient qu'à une instance).
/// Sert à privilégier la visite en cours au classement — jamais à filtrer.
///
public string? ConfigurationId { get; set; }
/// Id de la Section ou de la Resource dont ce morceau provient.
public string ContentId { get; set; }
public ContentSourceType ContentType { get; set; }
/// Position du morceau dans le contenu source.
public int ChunkIndex { get; set; }
/// Page du document, null hors contenu paginé. Sert à citer la source.
public int? PageNumber { get; set; }
/// Langue de ce morceau (FR, NL, EN...). La recherche ne filtre pas dessus.
public string Language { get; set; }
/// Le texte réellement injecté dans le prompt. L'embedding ne sert qu'à retrouver cette ligne.
public string Text { get; set; }
public Vector Embedding { get; set; }
public DateTime UpdatedAt { get; set; }
}
public enum ContentSourceType
{
Section = 0,
Resource = 1
}
}