using System; using Avalonia; using Avalonia.Controls; using Project_Periodensystem.Model; using Project_Periodensystem.Persistence; using Project_Periodensystem.Controller; namespace Project_Periodensystem.View { /// /// Navigation Service Implementation im View-Layer /// Implementiert INavigationService Interface vom Controller /// SAUBERE TRENNUNG: Controller definiert WAS, View definiert WIE /// public class NavigationService : INavigationService { private readonly MainWindow _mainWindow; private PeriodensystemController? _dataController; /// /// Konstruktor /// public NavigationService(MainWindow mainWindow) { _mainWindow = mainWindow ?? throw new ArgumentNullException(nameof(mainWindow)); Logger.Log("NavigationService initialisiert - saubere Interface-Trennung"); } /// /// Data Controller setzen (löst zirkuläre Abhängigkeit) /// public void SetDataController(PeriodensystemController dataController) { _dataController = dataController ?? throw new ArgumentNullException(nameof(dataController)); } /// /// Navigation zum Periodensystem (Interface Implementation) /// public void NavigateToPeriodicTable() { try { if (_dataController == null) { Logger.LogError("DataController nicht gesetzt"); return; } var periodicTablePage = new PeriodicTablePage(); periodicTablePage.SetController(_dataController); var mainContent = _mainWindow.FindControl("MainContent"); if (mainContent != null) { mainContent.Content = periodicTablePage; Logger.Log("NavigationService: Navigation zum Periodensystem"); } else { Logger.LogError("MainContent Control nicht gefunden"); } } catch (Exception ex) { Logger.LogException(ex, "NavigateToPeriodicTable"); } } /// /// Navigation zur About-Seite (Interface Implementation) /// public void NavigateToAbout() { try { if (_dataController == null) { Logger.LogError("DataController nicht gesetzt"); return; } var aboutPage = new AboutPage(); aboutPage.SetController(_dataController); var mainContent = _mainWindow.FindControl("MainContent"); if (mainContent != null) { mainContent.Content = aboutPage; Logger.Log("NavigationService: Navigation zu About"); } else { Logger.LogError("MainContent Control nicht gefunden"); } } catch (Exception ex) { Logger.LogException(ex, "NavigateToAbout"); } } /// /// Navigation zur Landing Page (Interface Implementation) /// public void NavigateToLanding() { try { if (_dataController == null) { Logger.LogError("DataController nicht gesetzt"); return; } var landingPage = new LandingPage(); landingPage.SetController(_dataController); var mainContent = _mainWindow.FindControl("MainContent"); if (mainContent != null) { mainContent.Content = landingPage; Logger.Log("NavigationService: Navigation zur Landing Page"); } else { Logger.LogError("MainContent Control nicht gefunden"); } } catch (Exception ex) { Logger.LogException(ex, "NavigateToLanding"); } } /// /// Theme-Wechsel (Interface Implementation) /// public void ToggleTheme() { try { var app = Application.Current; if (app != null) { var currentTheme = app.ActualThemeVariant; var newTheme = currentTheme == Avalonia.Styling.ThemeVariant.Dark ? Avalonia.Styling.ThemeVariant.Light : Avalonia.Styling.ThemeVariant.Dark; app.RequestedThemeVariant = newTheme; // Settings speichern var settings = new AppSettings { LastTheme = newTheme.ToString() ?? "Dark", LastUsed = DateTime.Now, PreferredLanguage = "German" }; DataManager.SaveSettings(settings); Logger.Log($"NavigationService: Theme gewechselt zu {newTheme}"); } } catch (Exception ex) { Logger.LogException(ex, "ToggleTheme"); } } /// /// Export-Bestätigung anzeigen (Interface Implementation) /// public void ShowExportConfirmation() { try { Logger.Log("NavigationService: Export-Bestätigung angezeigt"); // Hier könnte ein Dialog oder Notification angezeigt werden } catch (Exception ex) { Logger.LogException(ex, "ShowExportConfirmation"); } } } }