using SteUp.Shared.Core.Entities; using SteUp.Shared.Core.Enum; namespace SteUp.Shared.Core.Helpers; /// /// Mappature di stato per i badge (STILE_UI §6.4): tono, icona ed etichetta di /// ogni stato vivono qui e solo qui. Le schermate non compongono badge a mano, /// così lo stesso stato si presenta identico ovunque e un nuovo stato si /// aggiunge in un punto solo. /// public static class StatusBadgeHelper { public readonly record struct BadgeSpec(string Tone, string Icon, string Label); /// Stato di una scheda rispetto al server. public static BadgeSpec ToBadge(this SyncState state) => state switch { SyncState.Bozza => new BadgeSpec("warning", "ri-edit-line", "Da completare"), SyncState.DaInviare => new BadgeSpec("danger", "ri-smartphone-line", "Da inviare"), SyncState.Inviato => new BadgeSpec("success", "ri-cloud-line", "Inviato"), _ => new BadgeSpec("neutral", "ri-question-line", "Sconosciuto") }; /// Stato di un'ispezione. public static BadgeSpec ToBadge(this StatusEnum stato) => stato switch { StatusEnum.InCorso => new BadgeSpec("info", "ri-play-circle-line", "In corso"), StatusEnum.Completata => new BadgeSpec("success", "ri-check-double-line", "Conclusa"), StatusEnum.Verifica => new BadgeSpec("warning", "ri-search-eye-line", "In verifica"), StatusEnum.Annullata => new BadgeSpec("neutral", "ri-close-circle-line", "Annullata"), _ => new BadgeSpec("neutral", "ri-question-line", "Sconosciuto") }; /// /// Sintesi di un'ispezione per i lettori di schermo: cosa è, a che punto /// sta e cosa resta da fare, in una frase sola. /// public static string ToSemanticLabel(this Ispezione ispezione) { var schede = ispezione.Schede.Count; var daInviare = ispezione.Schede.CountDaInviare(); var bozze = ispezione.Schede.CountBozze(); var parti = new List { $"Ispezione {ispezione.CodMdep}", ispezione.Stato.ToBadge().Label, schede == 1 ? "1 scheda" : $"{schede} schede" }; if (daInviare > 0) parti.Add($"{daInviare} da inviare"); if (bozze > 0) parti.Add($"{bozze} da completare"); return string.Join(", ", parti); } }