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