using MudBlazor; using Somnia.GuestLog.Enums.Services; using Somnia.GuestLog.Enums.UI; using Somnia.GuestLog.Models.DTOs; using IResult = Somnia.GuestLog.Models.DTOs.IResult; namespace Somnia.GuestLog.Services; public class UserMessageService( ILocalizerService Localizer, ISnackbar snackbar ) : IUserMessageService { public void ShowMessage(string text, MessageKind kind, params object[] parameters) { string formatedMsg = GetFormatedMessage(text, parameters); ShowSnackbar(formatedMsg, kind); } public void ShowResult(IResult resultDto) { ShowResultWithMessage(resultDto, message: null); } public void ShowResultWithMessage(IResult resultDto, string? message) { string resultMsg = GetMsgForResultCode(resultDto.ResultCode); resultMsg = GetFormatedMessage(resultMsg, resultDto.Context); string finalMsg = message is not null ? $"{message.Trim().TrimEnd(':')}: {resultMsg}" : resultMsg; //Show success when OK, error for UnknownErrors and warning otherwise. MessageKind kind = resultDto switch { { IsSuccess: true } => MessageKind.Success, { ResultCode: ResultCode.UnknownError } => MessageKind.Error, _ => MessageKind.Warning }; ShowSnackbar(finalMsg, kind); } #region Internal Methods private void ShowSnackbar(string msg, MessageKind kind) { snackbar.Add(message: msg, severity: GetSnackbarSeveryForMessageKind(kind)); } private string GetMsgForResultCode(ResultCode resultCode) { return Localizer.GetEnumValue(resultCode); } private static string GetFormatedMessage(string template, params object[]? parameters) { if (parameters is null || parameters.Length == 0) { return template; } return string.Format(template, parameters); } private static MudBlazor.Severity GetSnackbarSeveryForMessageKind(MessageKind kind) => kind switch { MessageKind.Info => MudBlazor.Severity.Info, MessageKind.Warning => MudBlazor.Severity.Warning, MessageKind.Error => MudBlazor.Severity.Error, MessageKind.Success => MudBlazor.Severity.Success, MessageKind.Normal => MudBlazor.Severity.Normal, _ => throw new ArgumentOutOfRangeException(nameof(kind), $"Not expected MessageKind value: {kind}") }; #endregion }