using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Threading.Tasks;
using Robust.Client.ViewVariables.Instances;
using Robust.Shared.Network.Messages;
using Robust.Shared.ViewVariables;
namespace Robust.Client.ViewVariables
{
internal interface IClientViewVariablesManagerInternal : IClientViewVariablesManager
{
void Initialize();
///
/// Creates the ideal property editor for a specific property type.
///
/// The type of the property to create an editor for.
VVPropEditor PropertyFor(Type? type);
///
/// Requests a session to an object on the server.
///
/// The selector so the server knows what object we want.
/// A session that can be used to request data and modify the remote object.
Task RequestSession(ViewVariablesObjectSelector selector);
///
/// Requests a data blob from the object referenced by a VV session.
///
/// The session for the remote object.
/// A request object the server uses to know what kind of data you want of the remote object.
Task RequestData(ViewVariablesRemoteSession session, ViewVariablesRequest meta);
///
/// Requests a data blob from the object referenced by a VV session.
///
/// The type of blob that is expected of the server to be sent back, to be automatically cast for convenience.
/// The session for the remote object.
/// A request object the server uses to know what kind of data you want of the remote object.
Task RequestData(ViewVariablesRemoteSession session, ViewVariablesRequest meta) where T : ViewVariablesBlob;
///
/// Close a session to a remote object.
///
/// The session to close.
void CloseSession(ViewVariablesRemoteSession session);
///
/// Attempts to get a VV session given its Uid.
///
///
///
bool TryGetSession(uint sessionId, [NotNullWhen(true)] out ViewVariablesRemoteSession? session);
///
/// Modify a remote object.
///
/// The session pointing to the remote object.
/// An array of objects that the server can parse to figure out what to assign.
/// The new value for the object.
/// Whether the will be reinterpreted on the server. Also see:
void ModifyRemote(ViewVariablesRemoteSession session, object[] propertyIndex, object? value, bool reinterpretValue = false);
///
/// Gets a collection of trait IDs that are agreed upon so knows which traits to instantiate.
///
///
///
ICollection