using RobotNet.VDA5050.InstantAction;
using RobotNet.VDA5050.Order;
using RobotNet10.FleetManager.Script;
using RobotNet10.FleetManager.Services.RobotManager.Models;
using RobotNet10.Shared;
using Action = RobotNet.VDA5050.InstantAction.Action;
namespace RobotNet10.FleetManager.Services.RobotController;
///
/// Interface for RobotController - instance per robot
///
public interface IRobotController : IDisposable
{
///
/// Robot ID (SerialNumber)
///
string RobotId { get; }
///
/// Robot data containing all robot information
///
RobotData Data { get; }
///
/// Whether robot is online (derived from ConnectionState)
///
bool IsOnline { get; }
///
/// Whether the robot is ready for the order
///
bool IsReady { get; }
///
/// Move robot to a specific node by NodeName
///
Task MoveToNodeAsync(string nodeName, double? angle, CancellationToken cancellationToken = default);
///
/// Move robot to a specific node by NodeId (string)
///
Task MoveToNodeByIdAsync(string nodeId, double? angle, CancellationToken cancellationToken = default);
///
/// Move robot to a specific node by NodeId (Guid)
///
Task MoveToNodeByGuidAsync(Guid nodeId, double? angle, CancellationToken cancellationToken = default);
///
/// Move the robot to a taget action and execute action
///
///
///
///
///
Task MoveToStationAsync(string nodeName, StationAction action, CancellationToken cancellationToken = default);
///
/// Send a single instant action to robot
///
Task SendInstantActionAsync(Action action, CancellationToken cancellationToken = default);
///
/// Send order to robot
///
Task SendOrderAsync(OrderMsg order, CancellationToken cancellationToken = default);
///
/// Send instant actions message to robot
///
Task SendInstantActionsAsync(InstantActionsMsg instantActions, CancellationToken cancellationToken = default);
///
/// Request factsheet from robot
///
Task RequestFactsheetAsync(CancellationToken cancellationToken = default);
///
/// Request state from robot
///
Task RequestStateAsync(CancellationToken cancellationToken = default);
///
/// Cancel current order
///
Task CancelOrderAsync(CancellationToken cancellationToken = default);
}