using System.Text.Json; using System.IO; using libObsidean; namespace EscribePassword { internal class EstadoPersistente { // Ruta donde se guardará el estado private static readonly string _filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "estado.json"); // Instancia privada estática, parte del patrón Singleton private static EstadoPersistente _instance; private List passwords; public List Passwords { get { if (passwords == null) passwords = new List(); return passwords; } set { passwords = value; } } // Constructor público sin parámetros requerido para la deserialización public EstadoPersistente() { passwords = new List(); } // Propiedad pública estática para acceder a la instancia public static EstadoPersistente Instance { get { if (_instance == null) { _instance = CargarEstado(TiposEstadosPersistentes.Obsidean); } return _instance; } } // Método para guardar el estado en un archivo JSON public void GuardarEstado(TiposEstadosPersistentes tipo) { if (tipo == TiposEstadosPersistentes.Json) { var options = new JsonSerializerOptions { WriteIndented = true // para una salida JSON formateada legiblemente }; string json = JsonSerializer.Serialize(this, options); File.WriteAllText(_filePath, json); } else if (tipo == TiposEstadosPersistentes.Obsidean) { // if (Passwords.Any(o => o.IsModified)) { Obsidean obs = new Obsidean(); var tabla = EscribePassword.Passwords.ConvertPasswordsListToArray(Passwords); obs.EscribirPasswords(tabla); } } } // Método estático para cargar el estado desde un archivo JSON private static EstadoPersistente CargarEstado(TiposEstadosPersistentes tipo) { try { if (tipo == TiposEstadosPersistentes.Json) { if (File.Exists(_filePath)) { string json = File.ReadAllText(_filePath); return JsonSerializer.Deserialize(json); } return new EstadoPersistente(); // Devuelve una nueva instancia si no existe el archivo } else if (tipo == TiposEstadosPersistentes.Obsidean) { Obsidean obs = new Obsidean(); var tabla = obs.LeerPasswords(); if (tabla != null) { var newEP = new EstadoPersistente(); newEP.Passwords = EscribePassword.Passwords.ConvertArrayToPasswordsList(tabla); return newEP; } } return new EstadoPersistente(); } catch { return new EstadoPersistente(); // Devuelve una nueva instancia si hay un error durante la carga } } } enum TiposEstadosPersistentes { Obsidean, Json } }