using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using LehrerApp.Core.Interfaces; using LehrerApp.Core.Models; using LehrerApp.Core.Services; using LehrerApp.Data; using LehrerApp.Desktop.Services; using LehrerApp.Desktop.ViewModels.Planning; using LehrerApp.Sync; using LehrerApp.Sync.Crypto; using System.Collections.ObjectModel; using System.Globalization; using System.Security.Cryptography; using System.Text.Json; using System.Text.Json.Serialization; namespace LehrerApp.Desktop.ViewModels.Settings; public partial class SettingsViewModel { // ── Fächer ──────────────────────────────────────────────────────────────── [ObservableProperty] private string _newName = ""; [ObservableProperty] private string _newShort = ""; [ObservableProperty] private string _newNameError = ""; public ObservableCollection Subjects { get; } = []; // ── Fächer: Laden / Hinzufügen / Löschen ───────────────────────────────── public void LoadSubjects() { Subjects.Clear(); foreach (var s in _subjects.GetAll()) Subjects.Add(new SubjectListItem(s)); } [RelayCommand] private void AddSubject() { if (string.IsNullOrWhiteSpace(NewName)) { NewNameError = "Name erforderlich."; return; } try { _subjects.Save(new Subject { Name = NewName.Trim(), ShortName = NewShort.Trim() }); } catch (InvalidOperationException ex) { NewNameError = ex.Message; return; } NewName = ""; NewShort = ""; NewNameError = ""; LoadSubjects(); } [RelayCommand] private void DeleteSubject(SubjectListItem? item) { if (item is null) return; try { _subjects.Delete(item.Id); } catch (InvalidOperationException ex) { NewNameError = ex.Message; return; } NewNameError = ""; if (CatalogSubject?.Id == item.Id) CatalogSubject = null; LoadSubjects(); } } public class SubjectListItem(Subject s) { public Guid Id { get; } = s.Id; public string Name { get; } = s.Name; public string ShortName { get; } = s.ShortName; }