using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; namespace CtrEditor { public class DatosDeTrabajo { public Dictionary Imagenes { get; private set; } private MainViewModel _mainViewModel; public DatosDeTrabajo() { Imagenes = new Dictionary(); CargarImagenes(); // Inicializar la carga de imágenes basada en el directorio persistente } public void SetMainViewModel(MainViewModel mainViewModel) { _mainViewModel = mainViewModel; } public string ObtenerPathImagenConExtension(string key, string extension) { if (Imagenes.TryGetValue(key, out string imagePath)) { string jsonPath = Path.ChangeExtension(imagePath, extension); return jsonPath; } return null; } public string? ObtenerPathAllPages(string extension) { if (!string.IsNullOrEmpty(EstadoPersistente.Instance.directorio)) return Path.Combine(EstadoPersistente.Instance.directorio, "AllPages" + extension); return null; } public void CargarImagenes() { Imagenes.Clear(); string folderPath = EstadoPersistente.Instance.directorio; // Usar directamente desde el Singleton if (Directory.Exists(folderPath)) { var archivosImagen = Directory.GetFiles(folderPath, "*.png"); // Ajustar para otros formatos si es necesario foreach (var archivo in archivosImagen) { var nombreArchivo = Path.GetFileName(archivo); if (!Imagenes.ContainsKey(nombreArchivo)) { Imagenes[nombreArchivo] = archivo; } } // Cargar datos de imágenes existentes desde archivos JSON if (_mainViewModel != null) { CargarDatosImagenesExistentes(); } } } private void CargarDatosImagenesExistentes() { var jsonSerializerSettings = GetJsonSerializerSettings(); foreach (var imageName in Imagenes.Keys) { string jsonPath = ObtenerPathImagenConExtension(imageName, ".json"); if (!string.IsNullOrEmpty(jsonPath) && File.Exists(jsonPath)) { try { // Cargar datos completos del archivo JSON string jsonString = File.ReadAllText(jsonPath); var simulationData = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonString, jsonSerializerSettings); // Cargar datos de imágenes si existen en el archivo if (simulationData?.ImageDataDictionary != null) { foreach (var imageDataEntry in simulationData.ImageDataDictionary) { // Solo cargar si no existe ya en el diccionario principal if (!_mainViewModel._imageDataDictionary.ContainsKey(imageDataEntry.Key)) { _mainViewModel._imageDataDictionary[imageDataEntry.Key] = imageDataEntry.Value; } } } // Compatibilidad con versiones anteriores (ImageCustomNames) #pragma warning disable CS0618 // Type or member is obsolete if (simulationData?.ImageCustomNames != null) { foreach (var customName in simulationData.ImageCustomNames) { var imageData = _mainViewModel.GetOrCreateImageData(customName.Key); if (string.IsNullOrEmpty(imageData.CustomName)) // Solo actualizar si no tiene nombre personalizado { imageData.CustomName = customName.Value; } } } #pragma warning restore CS0618 } catch (Exception ex) { // Log del error pero no fallar la carga completa System.Diagnostics.Debug.WriteLine($"Error al cargar datos de imagen desde {jsonPath}: {ex.Message}"); // Como fallback, crear una instancia vacía _mainViewModel.GetOrCreateImageData(imageName); } } else { // Si no existe archivo JSON, crear instancia vacía _mainViewModel.GetOrCreateImageData(imageName); } } } private Newtonsoft.Json.JsonSerializerSettings GetJsonSerializerSettings() { return new Newtonsoft.Json.JsonSerializerSettings { Formatting = Newtonsoft.Json.Formatting.Indented, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore, TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Auto, ObjectCreationHandling = Newtonsoft.Json.ObjectCreationHandling.Replace, ConstructorHandling = Newtonsoft.Json.ConstructorHandling.AllowNonPublicDefaultConstructor }; } } }