using RobotNet.Script.Expressions;
using System.Linq.Expressions;
namespace RobotNet.Script;
///
/// Service quản lý các phần tử trong bản đồ.
///
public interface IMapManager
{
///
/// Trả về phần tử theo tên trong bản đồ.
///
///
///
///
Task GetElement(string map, string name);
///
/// Retrieves a node from the specified map by its name.
///
/// This method performs an asynchronous operation to locate a node within the specified map.
/// Ensure that the map and name parameters are valid and non-empty before calling this method.
/// The identifier of the map from which to retrieve the node. Cannot be null or empty.
/// The name of the node to retrieve. Cannot be null or empty.
/// A task that represents the asynchronous operation. The task result contains the node matching the specified name
/// within the given map, or if no such node exists.
Task GetNode(string map, string name);
///
/// Tìm kiếm các phần tử trong bản đồ theo biểu thức.
///
///
///
///
Task FindElements(string map, string model);
///
/// Tìm kiếm các phần tử trong bản đồ theo biểu thức.
///
///
///
///
///
Task FindElements(string map, string model, Expression> expr);
}
///
/// Thông tin về một nút trong bản đồ.
///
public interface INode
{
///
/// Id của nút.
///
Guid Id { get; }
///
/// Id của map chứa nút này.
///
Guid MapId { get; }
///
/// Tên của nút
///
string Name { get; }
///
/// Tọa độ trục hoành của nút trong không gian 2D.
///
double X { get; }
///
/// Tọa độ trục tung của nút trong không gian 2D.
///
double Y { get; }
///
/// Hướng của nút trong không gian 2D, tính bằng độ.
///
double Theta { get; }
}
///
/// Quản lý thông tin của một phần tử trong bản đồ.
///
public interface IElement
{
///
/// Id của phần tử.
///
Guid Id { get; }
///
/// Id model của phần tử này.
///
Guid ModelId { get; }
///
/// Tên của model mà phần tử này thuộc về.
///
string ModelName { get; }
///
/// Id của nút mà phần tử này thuộc về.
///
Guid NodeId { get; }
///
/// Tên của phần tử.
///
string Name { get; }
///
/// Tạo độ trục hoành tương dối của phần từ so với nút mà nó thuộc về.
///
double OffsetX { get; }
///
/// Tọa độ trục tung tương đối của phần từ so với nút mà nó thuộc về.
///
double OffsetY { get; }
///
/// Tên của nút mà phần tử này thuộc về.
///
string NodeName { get; }
///
/// Tọa độ trục hoành của nút trong không gian 2D.
///
double X { get; }
///
/// Tọa độ trục tung của nút trong không gian 2D.
///
double Y { get; }
///
/// Hướng của phần tử trong không gian 2D, tính bằng độ.
///
double Theta { get; }
///
/// Các thuộc tính của phần tử, bao gồm các thuộc tính bool, double, int và string.
///
ElementProperties Properties { get; }
///
/// Lưu các thay đổi của thuộc tính phần tử vào cơ sở dữ liệu
///
///
Task SaveChangesAsync();
}