namespace RobotNet10.FleetManager.Script;
///
/// Service interface for managing map layouts, nodes, and stations.
/// Provides methods to retrieve map elements (nodes, stations) and actions from the layout database.
///
public interface ILayoutManager
{
///
/// Retrieves a station from the specified map by its name.
///
/// The identifier of the map/layout. Cannot be null or empty.
/// The version of the map. Cannot be null or empty.
/// The level identifier within the map. Cannot be null or empty.
/// The name of the station to retrieve. Cannot be null or empty.
///
/// A task that represents the asynchronous operation.
/// The task result contains the matching the specified name within the given map,
/// or throws an exception if no such station exists.
///
Task GetStation(string layout, string version, string level, 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 version of the map. Cannot be null or empty.
/// The level identifier within the map. 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 matching the specified name within the given map,
/// or throws an exception if no such node exists.
///
Task GetNode(string layout, string version, string level, string name);
///
/// Retrieves a VDA5050 action configuration for a specific element (node or station) in the map.
///
/// The identifier of the map/layout. Cannot be null or empty.
/// The version of the map. Cannot be null or empty.
/// The level identifier within the map. Cannot be null or empty.
/// The name of the element (node or station) for which to retrieve the action. Cannot be null or empty.
/// The identifier of the robot that will execute the action. Used for robot-specific action configuration. Cannot be null or empty.
///
/// A task that represents the asynchronous operation.
/// The task result contains the VDA5050 configured for the specified element and robot,
/// or throws an exception if no such action exists.
///
Task GetAction(string layout, string version, string level, string name, string robotId);
}
///
/// Represents a node (waypoint) in the map layout.
/// Nodes define points where robots can navigate to or pass through.
/// Conforms to VDMA LIF (Logistics Interface Format) standard.
///
public interface INode
{
///
/// Gets or sets the unique identifier of the node.
///
public Guid Id { get; set; }
///
/// Gets or sets the parent map identifier that contains this node.
///
public Guid MapId { get; set; }
///
/// Gets or sets the node identifier (VDMA LIF: nodeId).
/// This is a required field and must be unique within the level.
///
public string NodeId { get; set; }
///
/// Gets or sets the node name (VDMA LIF: nodeName).
/// This is an optional human-readable name for the node.
///
public string? NodeName { get; set; }
///
/// Gets or sets the node description (VDMA LIF: nodeDescription).
/// This is an optional description providing additional information about the node.
///
public string? NodeDescription { get; set; }
///
/// Gets or sets the X coordinate of the node position in meters (VDMA LIF: nodePosition.x).
/// This is a required field.
///
public double X { get; set; }
///
/// Gets or sets the Y coordinate of the node position in meters (VDMA LIF: nodePosition.y).
/// This is a required field.
///
public double Y { get; set; }
}
///
/// Represents a station (workstation or loading/unloading point) in the map layout.
/// Stations are locations where robots can perform pick or drop operations.
/// Conforms to VDMA LIF (Logistics Interface Format) standard.
///
public interface IStation
{
///
/// Gets the unique identifier of the station.
///
Guid Id { get; }
///
/// Gets the identifier of the map that contains this station.
///
Guid MapId { get; }
///
/// Gets the identifiers of the nodes that this station is linked to.
/// A station can be associated with one or more nodes for navigation purposes.
///
Guid[] NodeId { get; }
///
/// Gets the station identifier (VDMA LIF: stationId).
/// This is a required field and must be unique within the level.
///
public string StationId { get; }
///
/// Gets the station name (VDMA LIF: stationName).
/// This is an optional human-readable name for the station.
///
public string? StationName { get; }
///
/// Gets the station description (VDMA LIF: stationDescription).
/// This is an optional description providing additional information about the station.
///
public string? StationDescription { get; }
///
/// Gets the station height in meters (VDMA LIF: stationHeight).
/// This is an optional field indicating the height of the station platform.
///
public double? StationHeight { get; }
///
/// Gets the X coordinate of the station position in meters (VDMA LIF: stationPosition.x).
/// This is a required field.
///
public double X { get; }
///
/// Gets the Y coordinate of the station position in meters (VDMA LIF: stationPosition.y).
/// This is a required field.
///
public double Y { get; }
///
/// Gets the theta orientation angle in radians (VDMA LIF: stationPosition.theta).
/// This is an optional field indicating the orientation of the station.
/// Range: [-Pi ... Pi]
///
public double? Theta { get; }
}