using System;
using System.Collections.Generic;
using System.ComponentModel;
using Artemis.Core.Events;
namespace Artemis.Core;
///
/// Represents a kind of node inside a
///
public interface INode : INotifyPropertyChanged, IBreakableModel, IPluginFeatureDependent
{
///
/// Gets or sets the ID of the node.
///
Guid Id { get; set; }
///
/// Gets or sets the node data with information about this node
///
NodeData? NodeData { get; set; }
///
/// Gets the name of the node
///
string Name { get; set; }
///
/// Gets the description of the node
///
string Description { get; set; }
///
/// Gets a boolean indicating whether the node is the exit node of the script
///
bool IsExitNode { get; }
///
/// Gets a boolean indicating whether the node is a default node that connot be removed
///
bool IsDefaultNode { get; }
///
/// Gets or sets the X-position of the node
///
public double X { get; set; }
///
/// Gets or sets the Y-position of the node
///
public double Y { get; set; }
///
/// Gets or sets the help URL of the node
///
string HelpUrl { get; set; }
///
/// Gets a read-only collection of the pins on this node
///
public IReadOnlyCollection Pins { get; }
///
/// Gets a read-only collection of the pin collections on this node
///
public IReadOnlyCollection PinCollections { get; }
///
/// Called when the node resets
///
event EventHandler Resetting;
///
/// Occurs when a pin was added to the node
///
event EventHandler> PinAdded;
///
/// Occurs when a pin was removed from the node
///
event EventHandler> PinRemoved;
///
/// Occurs when a pin collection was added to the node
///
event EventHandler> PinCollectionAdded;
///
/// Occurs when a pin was removed from the node
///
event EventHandler> PinCollectionRemoved;
///
/// Attempts to initialize the node.
///
/// The script the node is contained in
void TryInitialize(INodeScript script);
///
/// Attempts to evaluate the value of the output pins of this node
///
void TryEvaluate();
///
/// Resets the node causing all pins to re-evaluate the next time is called
///
void Reset();
}