using System; using Avalonia.Controls; using Avalonia.Interactivity; using ChronoFlow.Model; using ChronoFlow.Persistence; using ChronoFlow.View.Admin; using ChronoFlow.View.Mitarbeiter; namespace ChronoFlow.View; /// /// Hauptfenster der Anwendung – je nach Benutzerrolle wird die passende Startansicht geladen. /// public partial class MainWindow : Window { private readonly ViewManager _viewManager; private readonly User _loggedInUser; /// /// Parameterloser Konstruktor – erforderlich für Avalonia Runtime Loader. /// Startet mit einem Dummy-Nutzer (Demo-Zwecke oder Designer-Unterstützung). /// public MainWindow() : this(new User { Username = "DemoUser", Role = "Mitarbeiter" }) { Console.WriteLine("⚠ Achtung: MainWindow ohne echten Benutzer gestartet (Demo-Modus)."); } /// /// Konstruktor – bekommt den eingeloggten Benutzer übergeben. /// Registriert alle möglichen Views und zeigt die Startansicht je nach Rolle. /// public MainWindow(User user) { InitializeComponent(); _loggedInUser = user; Console.WriteLine($"[DEBUG] MainWindow gestartet für Benutzer: {_loggedInUser.Username} ({_loggedInUser.Role})"); // Initialisierung des ViewManagers mit der ContentArea (wird in XAML gesetzt) _viewManager = new ViewManager(ContentArea); // 🔄 Registrierung aller Views, die im Projekt vorkommen _viewManager.Register("ProjektErstellen", () => new ProjektErstellenView(_viewManager)); _viewManager.Register("MitarbeiterHinzufuegen", () => new MitarbeiterHinzufuegenView()); _viewManager.Register("AdminMain", () => new AdminMainView(_viewManager)); _viewManager.Register("AlleProjekte", () => new AlleProjekteView(_viewManager)); _viewManager.Register("MitarbeiterListe", () => new MitarbeiterListeView(_viewManager)); _viewManager.Register("AbgeschlosseneProjekte", () => new AbgeschlosseneProjekteView(_viewManager)); _viewManager.Register("Zeiterfassung", () => new EmployeeTasksView(_loggedInUser, new SqliteZeiterfassungsService())); // 🧭 Starte mit der passenden Ansicht je nach Rolle if (_loggedInUser.Role == "Admin") { _viewManager.Show("AdminMain"); } else if (_loggedInUser.Role == "Mitarbeiter") { _viewManager.Show("Zeiterfassung"); } // 🖼️ Fenster-Titel setzen (optional für Nutzerfreundlichkeit) this.Title = $"ChronoFlow - Willkommen {_loggedInUser.Username} ({_loggedInUser.Role})"; } /// /// Öffnet die Mitarbeiter-Zeiterfassung (nur für Mitarbeiter-Sidebar-Button). /// private void Zeiterfassung_Click(object? sender, RoutedEventArgs e) { _viewManager.Show("Zeiterfassung"); } /// /// Öffnet das Formular zum Anlegen eines neuen Mitarbeiters. /// private void MitarbeiterHinzufuegen_Click(object? sender, RoutedEventArgs e) { _viewManager.Show("MitarbeiterHinzufuegen"); } /// /// Öffnet das Admin-Dashboard (Übersicht). /// private void AdminDashboard_Click(object? sender, RoutedEventArgs e) { _viewManager.Show("AdminMain"); } /// /// Extern aufrufbar für "Zurück zum Dashboard"-Funktion (z.B. in anderen Views). /// public void ShowAdminDashboard() { _viewManager.Show("AdminMain"); } /// /// Führt einen Logout durch – öffnet das Loginfenster neu und schließt sich selbst. /// private void Logout_Click(object? sender, RoutedEventArgs e) { var loginWindow = new LoginWindow(); loginWindow.Show(); this.Close(); // Schließt das aktuelle Fenster } }