using MaBibli.Shared.Entites;

namespace MaBibli.Client.Composants;

/// <summary>Libellés français des énumérations, au même endroit pour toute l'interface.</summary>
public static class Libelles
{
    public static string Format(Format format) => format switch
    {
        MaBibli.Shared.Entites.Format.Physique => "Physique",
        MaBibli.Shared.Entites.Format.Numerique => "Numérique",
        _ => format.ToString(),
    };

    /// <summary>
    /// Libellé du type de document. <b>« Non précisé » ne s'affiche pas sur une fiche</b> :
    /// c'est l'absence de choix, et l'interface ne montre que ce qui a été choisi. Le libellé
    /// existe pour les boutons de saisie et de filtre, où il faut bien nommer l'option.
    /// </summary>
    public static string TypeDocument(TypeDocument type) => type switch
    {
        MaBibli.Shared.Entites.TypeDocument.NonPrecise => "Non précisé",
        MaBibli.Shared.Entites.TypeDocument.Roman => "Roman",
        MaBibli.Shared.Entites.TypeDocument.BandeDessinee => "BD",
        _ => type.ToString(),
    };

    /// <summary>
    /// Libellé d'un rôle d'auteur. « Non précisé » ne s'affiche jamais sur une fiche : c'est
    /// l'absence de choix, pas une information.
    /// </summary>
    public static string RoleAuteur(RoleAuteur role) => role switch
    {
        MaBibli.Shared.Entites.RoleAuteur.NonPrecise => "Non précisé",
        MaBibli.Shared.Entites.RoleAuteur.Scenario => "Scénario",
        MaBibli.Shared.Entites.RoleAuteur.Dessin => "Dessin",
        MaBibli.Shared.Entites.RoleAuteur.Couleurs => "Couleurs",
        _ => role.ToString(),
    };

    public static string Statut(Statut statut) => statut switch
    {
        MaBibli.Shared.Entites.Statut.ALire => "À lire",
        MaBibli.Shared.Entites.Statut.EnCours => "En cours",
        MaBibli.Shared.Entites.Statut.Lu => "Lu",
        _ => statut.ToString(),
    };

    /// <summary>Classe CSS associée au statut, pour la pastille de couleur.</summary>
    public static string ClasseStatut(Statut statut) => statut switch
    {
        MaBibli.Shared.Entites.Statut.ALire => "statut-a-lire",
        MaBibli.Shared.Entites.Statut.EnCours => "statut-en-cours",
        MaBibli.Shared.Entites.Statut.Lu => "statut-lu",
        _ => string.Empty,
    };

    /// <summary>
    /// Classe CSS associée au type de document, pour la pastille de couleur (A2, IDEES.md) :
    /// le filtre doit reprendre le même vocabulaire visuel que la carte, pas des segments neutres.
    /// « Non précisé » n'a pas de couleur : ce n'est pas une valeur choisie.
    /// </summary>
    public static string ClasseTypeDocument(TypeDocument type) => type switch
    {
        MaBibli.Shared.Entites.TypeDocument.Roman => "type-roman",
        MaBibli.Shared.Entites.TypeDocument.BandeDessinee => "type-bd",
        _ => string.Empty,
    };
}
