Projekt_SS25/Project_Periodensystem.View/NavigationService.cs
2025-06-26 10:29:12 +02:00

164 lines
5.3 KiB
C#

using System;
using Avalonia;
using Avalonia.Controls;
using Project_Periodensystem.Model;
using Project_Periodensystem.Persistence;
using Project_Periodensystem.Controller;
namespace Project_Periodensystem.View
{
/// <summary>
/// Navigation Service Implementation im View-Layer
/// Implementiert INavigationService Interface vom Controller
/// SAUBERE TRENNUNG: Controller definiert WAS, View definiert WIE
/// </summary>
public class NavigationService : INavigationService
{
private readonly Window _mainWindow;
private PeriodensystemController? _dataController;
/// <summary>
/// Konstruktor
/// </summary>
public NavigationService(Window mainWindow)
{
_mainWindow = mainWindow ?? throw new ArgumentNullException(nameof(mainWindow));
Logger.Log("NavigationService initialisiert - saubere Interface-Trennung");
}
/// <summary>
/// Data Controller setzen (löst zirkuläre Abhängigkeit)
/// </summary>
public void SetDataController(PeriodensystemController dataController)
{
_dataController = dataController ?? throw new ArgumentNullException(nameof(dataController));
}
/// <summary>
/// Navigation zum Periodensystem (Interface Implementation)
/// </summary>
public void NavigateToPeriodicTable()
{
try
{
if (_dataController == null)
{
Logger.LogError("DataController nicht gesetzt");
return;
}
var periodicTablePage = new PeriodicTablePage();
periodicTablePage.SetController(_dataController);
_mainWindow.Content = periodicTablePage;
Logger.Log("NavigationService: Navigation zum Periodensystem");
}
catch (Exception ex)
{
Logger.LogException(ex, "NavigateToPeriodicTable");
}
}
/// <summary>
/// Navigation zur About-Seite (Interface Implementation)
/// </summary>
public void NavigateToAbout()
{
try
{
if (_dataController == null)
{
Logger.LogError("DataController nicht gesetzt");
return;
}
var aboutPage = new AboutPage();
aboutPage.SetController(_dataController);
_mainWindow.Content = aboutPage;
Logger.Log("NavigationService: Navigation zu About");
}
catch (Exception ex)
{
Logger.LogException(ex, "NavigateToAbout");
}
}
/// <summary>
/// Navigation zur Landing Page (Interface Implementation)
/// </summary>
public void NavigateToLanding()
{
try
{
if (_dataController == null)
{
Logger.LogError("DataController nicht gesetzt");
return;
}
var landingPage = new LandingPage();
landingPage.SetController(_dataController);
_mainWindow.Content = landingPage;
Logger.Log("NavigationService: Navigation zur Landing Page");
}
catch (Exception ex)
{
Logger.LogException(ex, "NavigateToLanding");
}
}
/// <summary>
/// Theme-Wechsel (Interface Implementation)
/// </summary>
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");
}
}
/// <summary>
/// Export-Bestätigung anzeigen (Interface Implementation)
/// </summary>
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");
}
}
}
}