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");
}
}
}
}