using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; using CommunityToolkit.Mvvm.ComponentModel; using FluentAvalonia.UI.Controls; using StabilityMatrix.Avalonia.ViewModels.Base; using StabilityMatrix.Avalonia.Views.Settings; using StabilityMatrix.Core.Attributes; using StabilityMatrix.Core.Models.Settings; using StabilityMatrix.Core.Services; namespace StabilityMatrix.Avalonia.ViewModels.Settings; [View(typeof(NotificationSettingsPage))] [Singleton] [ManagedService] public partial class NotificationSettingsViewModel(ISettingsManager settingsManager) : PageViewModelBase { public override string Title => "Notifications"; public override IconSource IconSource => new SymbolIconSource { Symbol = Symbol.Alert }; [ObservableProperty] private IReadOnlyList items = []; public override void OnLoaded() { base.OnLoaded(); Items = GetItems().OrderBy(item => item.Key?.Value).ToImmutableArray(); } private IEnumerable GetItems() { var settingsOptions = settingsManager.Settings.NotificationOptions; foreach (var notificationKey in NotificationKey.All.Values) { // If in settings, include settings value, otherwise default if (!settingsOptions.TryGetValue(notificationKey, out var option)) { option = notificationKey.DefaultOption; } yield return new NotificationSettingsItem(settingsManager) { Key = notificationKey, Option = option }; } } }