using MaBibli.Shared.Entites;
namespace MaBibli.Shared.Catalogue;
///
/// Critères de consultation du catalogue.
///
///
/// Il n'existe volontairement aucun critère sur AjoutePar. La bibliothèque est
/// commune à tout le foyer : filtrer les lectures sur ce champ serait un bug de conception.
/// L'absence de ce critère est l'endroit où l'invariant est le plus visible.
///
/// n'est pas une exception : il filtre sur le statut de l'appelant,
/// que le serveur connaît par les en-têtes SSOwat. Le client ne désigne jamais de qui il parle.
///
///
public record CritereLivres
{
///
/// Texte cherché dans le titre ou les auteurs. Insensible à la casse
/// et aux accents : « emile » trouve « Émile ».
///
public string? Recherche { get; init; }
/// Physique ou numérique. null = les deux : le catalogue est unique.
public Format? Format { get; init; }
///
/// Roman, bande dessinée… null = tous.
///
///
/// TypeDocument.NonPrecise est une valeur filtrable : « ce que je n'ai pas
/// encore rangé » est justement la question qu'on se pose après avoir introduit ce champ.
/// C'est ce qui la distingue du statut de lecture, dont l'absence n'est pas une valeur.
///
public TypeDocument? TypeDocument { get; init; }
///
/// Statut de lecture de l'utilisateur courant. null = tous.
///
///
/// Un livre sans statut pour cette personne ne remonte sous aucune valeur : « non
/// commencé » n'est pas un statut, c'est l'absence de statut. Il reste visible sans filtre.
///
public Statut? Statut { get; init; }
/// Ne garder que les livres d'un auteur — le « cliquer sur un auteur » d'CLAUDE.md.
public int? AuteurId { get; init; }
///
/// true = ce qui est dehors, false = ce qui est à la maison, null = tout.
///
///
/// ⚠️ Contrairement à , ce critère est commun au foyer : un prêt
/// n'appartient à personne en particulier, et aucune identité n'entre dans son évaluation.
/// C'est la même dissymétrie que partout ailleurs — le livre absent l'est pour tout le monde,
/// sa lecture ne l'est que pour soi.
///
/// L'écran « Prêts » répond déjà à « qu'est-ce qui est dehors ? ». Ce critère-ci répond à
/// l'autre moitié de la question, celle qu'aucun écran ne servait : « qu'est-ce que j'ai
/// réellement sous la main ? », par exemple avant de promettre un livre à quelqu'un.
///
///
public bool? Prete { get; init; }
}