using System; using System.Collections.ObjectModel; using System.Linq; using System.Threading.Tasks; using Avalonia.Controls; using Avalonia.Input; using Avalonia.Interactivity; using ChronoFlow.Model; using ChronoFlow.Persistence; using MessageBox.Avalonia; using MessageBox.Avalonia.DTO; using MessageBox.Avalonia.Enums; namespace ChronoFlow.View.Admin; public partial class MitarbeiterListeView : UserControl { private readonly ViewManager _viewManager; private readonly ObservableCollection _alleMitarbeiter = new(); private readonly SqliteZeiterfassungsService _dbService = new(); public MitarbeiterListeView(ViewManager viewManager) { InitializeComponent(); _viewManager = viewManager; LadeMitarbeiter(); } private void LadeMitarbeiter() { try { var mitarbeiter = _dbService.LadeAlleBenutzer() .Where(m => m.Role == "Mitarbeiter") .OrderBy(m => m.Username) .ToList(); _alleMitarbeiter.Clear(); foreach (var user in mitarbeiter) _alleMitarbeiter.Add(user); MitarbeiterListe.ItemsSource = _alleMitarbeiter; } catch (Exception ex) { Console.WriteLine($"❌ Fehler beim Laden der Mitarbeiter: {ex.Message}"); } } private void Suchfeld_KeyUp(object? sender, KeyEventArgs e) { var text = Suchfeld?.Text?.ToLower() ?? ""; MitarbeiterListe.ItemsSource = _alleMitarbeiter .Where(m => m.Username.ToLower().Contains(text)) .ToList(); } private async void Bearbeiten_Click(object? sender, RoutedEventArgs e) { if (sender is Button button && button.Tag is User benutzer) { var dialog = new MitarbeiterBearbeitenDialog(benutzer); var updatedUser = await dialog.ShowDialog((Window)this.VisualRoot!); if (updatedUser != null) { updatedUser.Password = benutzer.Password; updatedUser.Role = benutzer.Role; updatedUser.OriginalUsername = benutzer.Username; // ← WICHTIG! _dbService.UpdateBenutzer(updatedUser); LadeMitarbeiter(); } } } private async void Loeschen_Click(object? sender, RoutedEventArgs e) { if (sender is Button button && button.Tag is User benutzer) { var dialog = new ConfirmDialog($"Möchten Sie den Benutzer '{benutzer.Username}' wirklich löschen?"); var result = await dialog.ShowDialog((Window)this.VisualRoot!); if (result) { _dbService.LoescheBenutzer(benutzer.Username); LadeMitarbeiter(); } } } private void ZurueckButton_Click(object? sender, RoutedEventArgs e) { try { _viewManager.Show("AdminMain"); } catch (Exception ex) { Console.WriteLine($"❌ Fehler beim Zurückspringen: {ex.Message}"); } } private async void ResetPasswort_Click(object? sender, RoutedEventArgs e) { if (sender is Button button && button.Tag is User benutzer) { var dialog = new ConfirmDialog($"Soll das Passwort für '{benutzer.Username}' wirklich zurückgesetzt werden?"); var result = await dialog.ShowDialog((Window)this.VisualRoot!); if (result) { _dbService.ResetBenutzerPasswort(benutzer.Username); Console.WriteLine($"✅ Passwort für {benutzer.Username} zurückgesetzt."); } } } private async void PasswortReset_Click(object? sender, RoutedEventArgs e) { if (sender is Button button && button.Tag is User benutzer) { var dialog = new ConfirmDialog($"Möchten Sie das Passwort für '{benutzer.Username}' wirklich zurücksetzen?"); var result = await dialog.ShowDialog((Window)this.VisualRoot!); if (result) { benutzer.Password = "newpassword"; // 💡 hier später besser: generiertes oder festgelegtes Initialpasswort benutzer.MussPasswortAendern = true; _dbService.UpdateBenutzer(benutzer); Console.WriteLine($"✅ Passwort für {benutzer.Username} wurde zurückgesetzt."); } } } }