using CtrEditor.ObjetosSim;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;

namespace CtrEditor.Serialization
{
    /// <summary>
    /// Almacena datos locales para un objeto global
    /// </summary>
    public class DatosLocales
    {
        /// <summary>
        /// ID del objeto global al que pertenecen estos datos locales
        /// </summary>
        public UniqueId Id_GlobalObject { get; set; }

        /// <summary>
        /// Posición vertical local
        /// </summary>
        public float? Top { get; set; }

        /// <summary>
        /// Posición horizontal local
        /// </summary>
        public float? Left { get; set; }

        /// <summary>
        /// Ancho local
        /// </summary>
        public float? Ancho { get; set; }

        /// <summary>
        /// Alto local
        /// </summary>
        public float? Alto { get; set; }

        /// <summary>
        /// Diccionario para almacenar propiedades dinámicas adicionales
        /// </summary>
        public Dictionary<string, object> PropiedadesAdicionales { get; set; }

        /// <summary>
        /// Constructor por defecto necesario para deserialización
        /// </summary>
        public DatosLocales()
        {
            PropiedadesAdicionales = new Dictionary<string, object>();
        }

        /// <summary>
        /// Constructor con ID del objeto global
        /// </summary>
        public DatosLocales(UniqueId idGlobalObject)
        {
            Id_GlobalObject = idGlobalObject;
            PropiedadesAdicionales = new Dictionary<string, object>();
        }

        /// <summary>
        /// Copia los datos relevantes desde un objeto global
        /// </summary>
        public void CopiarDesdeObjeto(osBase objeto)
        {
            if (objeto == null) return;

            Id_GlobalObject = objeto.Id;
            Top = objeto.Top;
            Left = objeto.Left;
            Ancho = objeto.Ancho;
            Alto = objeto.Alto;

            // Aquí puedes añadir más propiedades si es necesario
        }

        /// <summary>
        /// Aplica los datos locales al objeto global
        /// </summary>
        public void AplicarAObjeto(osBase objeto)
        {
            if (objeto == null || objeto.Id.Value != Id_GlobalObject.Value) return;

            if (Left.HasValue) objeto.Left = Left.Value;
            if (Top.HasValue) objeto.Top = Top.Value;
            if (Ancho.HasValue) objeto.Ancho = Ancho.Value;
            if (Alto.HasValue) objeto.Alto = Alto.Value;

            // Aquí puedes aplicar más propiedades si es necesario
        }
    }
}