Editor/RbxlReader/Instances/Instance.cs
using RbxlReader.DataTypes;

namespace RbxlReader.Instances;

/// <summary>
/// Instance is a basic building block of a roblox game. Holds various variables with various data-types.
/// </summary>
public partial class Instance {
    public PlaceBinary? Rbxl {get; set;}

    public int Id {get; protected set;}
    public string ClassName {get; protected set;}
    public string Name {get {
        return property.ContainsKey("Name") ? (string)property["Name"].Value : ClassName;
    }}
    
    private Dictionary<string, InstanceProperty> property;

    public Instance(string className, Dictionary<string, InstanceProperty> props, int id = 0) {
        ClassName = className;
        property = props;
        Id = id;
    }

    public Instance(string className, int id = 0) {
        ClassName = className;
        property = new();
        Id = id;
    }

    public InstanceProperty? GetProperty(string name) {
        return property.ContainsKey(name) ? property[name] : null;
    }

    public void AddProperty(string name, PropertyType type, object value) {
        property.Add(name,
            new InstanceProperty(type, value)
        );
    }
    public void AddProperty(string name, InstanceProperty prop) {
        property.Add(name, prop);
    }
}