using System; using System.Linq; using Avalonia.Controls; using Avalonia.Interactivity; using Avalonia.Media; using ChronoFlow.Model; using ChronoFlow.Persistence; using ChronoFlow.Security; namespace ChronoFlow.View { /// /// UI-Logik zum Hinzufügen neuer Benutzer durch einen Admin. /// public partial class MitarbeiterHinzufuegenView : UserControl { public MitarbeiterHinzufuegenView() { InitializeComponent(); } /// /// Speichert den eingegebenen Benutzer, wenn alle Pflichtfelder ausgefüllt und der Benutzername noch nicht vergeben ist. /// private void SpeichernButton_Click(object? sender, RoutedEventArgs e) { try { var service = new SqliteZeiterfassungsService(); string username = UsernameBox.Text?.Trim() ?? ""; string password = PasswordBox.Text?.Trim() ?? ""; string rolle = (RoleBox.SelectedItem as ComboBoxItem)?.Content?.ToString() ?? ""; string mitarbeiternummer = MitarbeiternummerBox.Text?.Trim() ?? ""; string abteilung = AbteilungBox.Text?.Trim() ?? ""; // Validierung: Pflichtfelder if (string.IsNullOrWhiteSpace(username) || string.IsNullOrWhiteSpace(password) || string.IsNullOrWhiteSpace(rolle)) { FeedbackText.Text = "⚠ Bitte alle Pflichtfelder ausfüllen!"; FeedbackText.Foreground = Brushes.Red; FeedbackText.IsVisible = true; return; } // Verhindern von doppelten Benutzernamen (Case-Insensitive) if (service.LadeAlleBenutzer().Any(u => u.Username.Equals(username, StringComparison.OrdinalIgnoreCase))) { FeedbackText.Text = "❌ Dieser Benutzername ist bereits vergeben."; FeedbackText.Foreground = Brushes.Red; FeedbackText.IsVisible = true; return; } // Neuen Benutzer erstellen var neuerBenutzer = new User { Username = username, Password = PasswordHasher.HashPassword(password), Role = rolle, Mitarbeiternummer = mitarbeiternummer, Abteilung = abteilung, MussPasswortAendern = true }; // Speichern in Datenbank service.ErstelleNeuenBenutzer(neuerBenutzer); FeedbackText.Text = "✅ Mitarbeiter erfolgreich gespeichert."; FeedbackText.Foreground = Brushes.Green; FeedbackText.IsVisible = true; ClearFields(); } catch (Exception ex) { FeedbackText.Text = $"❌ Fehler: {ex.Message}"; FeedbackText.Foreground = Brushes.Red; FeedbackText.IsVisible = true; Console.WriteLine("❌ Ausnahme beim Speichern:\n" + ex); } } /// /// Setzt alle Eingabefelder zurück. /// private void ClearFields() { UsernameBox.Text = ""; PasswordBox.Text = ""; MitarbeiternummerBox.Text = ""; AbteilungBox.Text = ""; RoleBox.SelectedIndex = -1; } /// /// Wechselt zurück zum Admin-Hauptfenster. /// private void ZurueckZumDashboard_Click(object? sender, RoutedEventArgs e) { if (this.VisualRoot is MainWindow mainWindow) mainWindow.ShowAdminDashboard(); else Console.WriteLine("⚠️ MainWindow nicht gefunden!"); } /// /// Erstellt einen zufälligen Test-Mitarbeiter mit dem Passwort "newpassword" (gehasht). /// private void DemoBenutzerErstellen_Click(object? sender, RoutedEventArgs e) { var namen = new[] { "Max Mustermann", "Lena Schmidt", "Tobias Becker", "Julia Klein", "Nico Weber" }; var zufallsname = namen[new Random().Next(namen.Length)]; var service = new SqliteZeiterfassungsService(); // Prüfen, ob Name bereits vorhanden ist if (service.LadeAlleBenutzer().Any(u => u.Username.Equals(zufallsname, StringComparison.OrdinalIgnoreCase))) { FeedbackText.Text = "⚠ Demo-Mitarbeiter existiert bereits."; FeedbackText.Foreground = Brushes.OrangeRed; FeedbackText.IsVisible = true; return; } // Demo-User erstellen var demoUser = new User { Username = zufallsname, Password = PasswordHasher.HashPassword("newpassword"), Role = "Mitarbeiter", MussPasswortAendern = true }; service.ErstelleNeuenBenutzer(demoUser); FeedbackText.Text = $"✅ Demo-Mitarbeiter '{zufallsname}' erstellt (Passwort: newpassword)"; FeedbackText.Foreground = Brushes.Green; FeedbackText.IsVisible = true; } } }