using System.Collections.ObjectModel; using OF_DL.Models.Config; namespace OF_DL.Gui.ViewModels; public sealed class ConfigCategoryViewModel : ViewModelBase { public ConfigCategoryViewModel(string categoryName, IEnumerable fields) { CategoryName = categoryName; List fieldList = fields.ToList(); DownloadOnlySpecificDatesField = fieldList.FirstOrDefault(field => string.Equals(field.PropertyName, nameof(Config.DownloadOnlySpecificDates), StringComparison.Ordinal)); DownloadDateSelectionField = fieldList.FirstOrDefault(field => string.Equals(field.PropertyName, nameof(Config.DownloadDateSelection), StringComparison.Ordinal)); CustomDateField = fieldList.FirstOrDefault(field => string.Equals(field.PropertyName, nameof(Config.CustomDate), StringComparison.Ordinal)); IEnumerable visibleFields = IsDownloadBehavior ? fieldList.Where(field => field.PropertyName is not nameof(Config.DownloadOnlySpecificDates) and not nameof(Config.DownloadDateSelection) and not nameof(Config.CustomDate)) : fieldList; foreach (ConfigFieldViewModel field in visibleFields) { Fields.Add(field); } } public string CategoryName { get; } public bool IsDownloadBehavior => string.Equals(CategoryName, "Download Behavior", StringComparison.Ordinal); public ConfigFieldViewModel? DownloadOnlySpecificDatesField { get; } public ConfigFieldViewModel? DownloadDateSelectionField { get; } public ConfigFieldViewModel? CustomDateField { get; } public bool HasSpecificDateFilterFields => DownloadOnlySpecificDatesField != null && DownloadDateSelectionField != null && CustomDateField != null; public string SpecificDateFilterHelpText { get { List parts = []; if (!string.IsNullOrWhiteSpace(DownloadOnlySpecificDatesField?.HelpText)) { parts.Add(DownloadOnlySpecificDatesField.HelpText); } if (!string.IsNullOrWhiteSpace(DownloadDateSelectionField?.HelpText)) { parts.Add(DownloadDateSelectionField.HelpText); } if (!string.IsNullOrWhiteSpace(CustomDateField?.HelpText)) { parts.Add(CustomDateField.HelpText); } return string.Join(" ", parts.Distinct(StringComparer.Ordinal)); } } public bool HasSpecificDateFilterHelpText => !string.IsNullOrWhiteSpace(SpecificDateFilterHelpText); public ObservableCollection Fields { get; } = []; }