using System;
using System.Collections.Generic;
namespace ManagerService.Data
{
///
/// Une question posée au guide IA, et ce qu'il a répondu.
/// Une ligne par tour de conversation — pas l'historique complet à chaque tour,
/// sinon le tour 5 réécrirait les tours 1 à 4.
///
/// ⚠️ RGPD : texte libre saisi par un visiteur, pouvant contenir des données
/// personnelles voire sensibles (« je suis en fauteuil, c'est accessible ? »).
/// Aucun identifiant nominatif — ConversationId est un GUID de session.
/// Les questions brutes se purgent à 90 jours, les agrégats survivent.
///
public class VisitorQuestion
{
public long Id { get; set; }
/// GUID de session généré par le front, stable sur une conversation. Seul lien entre deux tours.
public string ConversationId { get; set; }
public string InstanceId { get; set; }
/// Null = question posée hors d'une visite (scope instance).
public string ConfigurationId { get; set; }
public AppType AppType { get; set; }
public bool IsVoice { get; set; }
public string Language { get; set; }
public string Question { get; set; }
public string Reply { get; set; }
public long TokensUsed { get; set; }
/// Faux = le guide n'a rien trouvé. C'est la colonne qui produit le rapport de trous de contenu.
public bool HasAnswer { get; set; }
/// Meilleur score de similarité du retrieval. 0 tant que le RAG n'est pas branché.
public double TopScore { get; set; }
/// Contenus cités dans la réponse (Section.Id / Resource.Id).
public List CitedContentIds { get; set; }
/// Rempli a posteriori par le job de regroupement, null jusque-là.
public string ThemeId { get; set; }
public DateTime CreatedAt { get; set; }
}
}