using System;
using System.Collections.Generic;
using System.IO;
using System.Text.Json;
using Project_Periodensystem.Model;
namespace Project_Periodensystem.Persistence
{
///
/// Erweiterte Persistenz - Speichern/Laden von JSON-Dateien
///
public static class DataManager
{
private static readonly string DataDirectory = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
"Periodensystem");
private static readonly string ElementsFile = Path.Combine(DataDirectory, "elements.json");
private static readonly string SettingsFile = Path.Combine(DataDirectory, "settings.json");
///
/// Speichert Elemente als JSON
///
public static void SaveElements(List elements)
{
try
{
Directory.CreateDirectory(DataDirectory);
var json = JsonSerializer.Serialize(elements, new JsonSerializerOptions { WriteIndented = true });
File.WriteAllText(ElementsFile, json);
Logger.Log($"Elemente gespeichert: {elements.Count} Einträge");
}
catch (Exception ex)
{
Logger.LogException(ex, "SaveElements");
}
}
///
/// Lädt Elemente aus JSON oder Fallback zu eingebauten Daten
///
public static List LoadElements()
{
try
{
if (File.Exists(ElementsFile))
{
var json = File.ReadAllText(ElementsFile);
var elements = JsonSerializer.Deserialize>(json);
if (elements != null && elements.Count > 0)
{
Logger.Log($"Elemente aus Datei geladen: {elements.Count}");
return elements;
}
}
}
catch (Exception ex)
{
Logger.LogException(ex, "LoadElements");
}
// Fallback zu eingebauten Daten
Logger.Log("Fallback zu eingebauten Element-Daten");
return PeriodicTableData.Elements;
}
///
/// Speichert Benutzereinstellungen
///
public static void SaveSettings(AppSettings settings)
{
try
{
Directory.CreateDirectory(DataDirectory);
var json = JsonSerializer.Serialize(settings, new JsonSerializerOptions { WriteIndented = true });
File.WriteAllText(SettingsFile, json);
}
catch (Exception ex)
{
Logger.LogException(ex, "SaveSettings");
}
}
///
/// Lädt Benutzereinstellungen
///
public static AppSettings LoadSettings()
{
try
{
if (File.Exists(SettingsFile))
{
var json = File.ReadAllText(SettingsFile);
var settings = JsonSerializer.Deserialize(json);
return settings ?? new AppSettings();
}
}
catch (Exception ex)
{
Logger.LogException(ex, "LoadSettings");
}
return new AppSettings();
}
}
///
/// Benutzereinstellungen für Persistenz
///
public class AppSettings
{
public string LastTheme { get; set; } = "Dark";
public DateTime LastUsed { get; set; } = DateTime.Now;
public string PreferredLanguage { get; set; } = "German";
}
}