using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.CustomControls;
using Robust.Shared.Maths;
using Robust.Shared.Serialization;
using Robust.Shared.Utility;
using Robust.Shared.ViewVariables;
using static Robust.Client.UserInterface.Controls.BoxContainer;
namespace Robust.Client.ViewVariables
{
///
/// Controls the behavior of a VV window.
///
internal abstract class ViewVariablesInstance
{
public readonly IViewVariablesManagerInternal ViewVariablesManager;
protected readonly IRobustSerializer _robustSerializer;
protected ViewVariablesInstance(IViewVariablesManagerInternal vvm, IRobustSerializer robustSerializer)
{
ViewVariablesManager = vvm;
_robustSerializer = robustSerializer;
}
///
/// Initializes this instance to work on a local object.
///
/// The window to initialize by adding GUI components.
/// The object that is being VV'd
public abstract void Initialize(SS14Window window, object obj);
///
/// Initializes this instance to work on a remote object.
/// This is called when the view variables manager has already made a session to the remote object.
///
/// The window to initialize by adding GUI components.
/// The data blob sent by the server for this remote object.
/// The session connecting to the remote object.
public virtual void Initialize(SS14Window window, ViewVariablesBlobMetadata blob, ViewVariablesRemoteSession session)
{
throw new NotSupportedException();
}
///
/// Invoked to "clean up" the instance, such as closing remote sessions.
///
public virtual void Close()
{
}
protected internal static IEnumerable> LocalPropertyList(object obj, IViewVariablesManagerInternal vvm,
IRobustSerializer robustSerializer)
{
var styleOther = false;
var type = obj.GetType();
var members = new List<(MemberInfo, VVAccess, object? value, Action