using System.Text.Json.Serialization;
namespace MaBibli.Shared.Dtos;
///
/// Un prêt tel qu'exposé par l'API — en cours ou clos, la table gardant l'historique complet.
///
///
/// Les champs Livre* recopient de quoi afficher le livre sans second appel : la vue
/// « prêts en cours » liste des prêts, mais ce que l'utilisateur y cherche est le livre
/// qui n'est plus à la maison.
///
public record PretDto
{
public required int Id { get; init; }
public required int LivreId { get; init; }
/// Nom de l'emprunteur, texte libre : aucun lien avec les comptes YunoHost.
public required string Emprunteur { get; init; }
public required DateTime DatePret { get; init; }
/// null tant que le livre n'a pas été rendu.
public DateTime? DateRetour { get; init; }
public string? LivreTitre { get; init; }
/// Auteurs du livre sur une ligne, déjà mis en forme par le serveur.
public string? LivreAuteurs { get; init; }
public string? LivreCoverUrl { get; init; }
[JsonIgnore]
public bool EstEnCours => DateRetour is null;
/// Nombre de jours écoulés depuis le départ du livre — ou durée totale s'il est rendu.
[JsonIgnore]
public int JoursEcoules =>
Math.Max(0, (int)((DateRetour ?? DateTime.UtcNow) - DatePret).TotalDays);
}
/// Charge utile d'un nouveau prêt.
///
/// Le livre n'y figure pas : il vient de l'URL. On ne prête pas « un livre quelconque », on prête
/// ce livre-ci, depuis sa fiche.
///
public record EnregistrementPret
{
/// Obligatoire : un prêt sans emprunteur ne se retrouve pas.
public string Emprunteur { get; set; } = string.Empty;
///
/// Date du prêt en UTC. null = maintenant.
///
///
/// Modifiable parce qu'on enregistre souvent un prêt après l'avoir fait — « tiens,
/// Paul a mon Zola depuis Noël ». Une date future est en revanche refusée : elle ne
/// correspondrait à rien de constatable.
///
public DateTime? DatePret { get; set; }
}
/// Charge utile du retour d'un livre.
public record RetourPret
{
/// Date du retour en UTC. null = maintenant.
public DateTime? DateRetour { get; set; }
}