using Flyshot.Core.Domain;
namespace Flyshot.ControllerClientCompat;
///
/// 定义 HTTP-only 兼容层对外暴露的 ControllerClient 语义服务接口。
///
public interface IControllerClientCompatService
{
///
/// 获取当前兼容层对外报告的服务端版本号。
///
string ServerVersion { get; }
///
/// 获取当前是否已经完成机器人初始化。
///
bool IsSetUp { get; }
///
/// 保存当前调用方期望连接的 replacement 服务端地址。
///
/// 客户端传入的服务端 IP。
/// 客户端传入的服务端端口。
void ConnectServer(string serverIp, int port);
///
/// 获取兼容服务端版本号。
///
/// 服务端版本号。
string GetServerVersion();
///
/// 获取兼容客户端版本号。
///
/// 客户端版本号。
string GetClientVersion();
///
/// 根据旧客户端使用的机器人名称完成机器人初始化。
///
/// 机器人名称。
void SetUpRobot(string robotName);
///
/// 根据旧客户端传入的环境文件完成机器人初始化。
///
/// 环境文件路径。
void SetUpRobotFromEnv(string envFile);
///
/// 设置是否显示 TCP 坐标轴。
///
/// 是否显示 TCP。
/// 坐标轴长度。
/// 坐标轴线宽。
void SetShowTcp(bool isShow, double axisLength, int axisSize);
///
/// 记录当前激活的控制器类型。
///
/// 是否为仿真控制器。
void SetActiveController(bool sim);
///
/// 记录当前控制器已经建立连接。
///
/// 控制器 IP。
void Connect(string robotIp);
///
/// 记录当前控制器已经断开。
///
void Disconnect();
///
/// 记录当前机器人进入使能态。
///
/// 缓冲区大小。
void EnableRobot(int bufferSize);
///
/// 记录当前机器人退出使能态。
///
void DisableRobot();
///
/// 停止当前运动状态。
///
void StopMove();
///
/// 读取当前控制器运行时状态快照。
///
/// 控制器运行时状态快照。
ControllerStateSnapshot GetControllerSnapshot();
///
/// 获取当前速度倍率。
///
/// 当前速度倍率。
double GetSpeedRatio();
///
/// 更新当前速度倍率。
///
/// 目标速度倍率。
void SetSpeedRatio(double ratio);
///
/// 写入兼容层缓存的 IO 数值。
///
/// IO 端口号。
/// IO 值。
/// IO 类型。
void SetIo(int port, bool value, string ioType);
///
/// 读取兼容层缓存的 IO 数值。
///
/// IO 端口号。
/// IO 类型。
/// 缓存中的 IO 值。
bool GetIo(int port, string ioType);
///
/// 按给定位姿和 seed 计算最近 IK。
///
/// 目标位姿数组。
/// IK seed 关节数组。
/// IK 结果关节数组。
IReadOnlyList GetNearestIk(IReadOnlyList pose, IReadOnlyList seed);
///
/// 设置当前 TCP 三维坐标。
///
/// TCP X。
/// TCP Y。
/// TCP Z。
void SetTcp(double x, double y, double z);
///
/// 读取当前 TCP 三维坐标。
///
/// TCP 数组。
IReadOnlyList GetTcp();
///
/// 读取当前关节位置。
///
/// 关节位置数组。
IReadOnlyList GetJointPositions();
///
/// 更新当前关节位置。
///
/// 目标关节位置。
void MoveJoint(IReadOnlyList jointPositions);
///
/// 执行普通轨迹。
///
/// 轨迹路点集合。
/// 执行参数。
void ExecuteTrajectory(IReadOnlyList> waypoints, TrajectoryExecutionOptions? options = null);
///
/// 读取当前末端位姿快照。
///
/// 位姿数组。
IReadOnlyList GetPose();
///
/// 上传一条飞拍轨迹。
///
/// 飞拍轨迹。
void UploadTrajectory(ControllerClientCompatUploadedTrajectory trajectory);
///
/// 列出当前已上传的飞拍轨迹名称。
///
/// 轨迹名称列表。
IReadOnlyList ListTrajectoryNames();
///
/// 执行指定名称的飞拍轨迹。
///
/// 轨迹名称。
/// 飞拍执行参数。
void ExecuteTrajectoryByName(string name, FlyshotExecutionOptions? options = null);
///
/// 保存指定飞拍轨迹的轨迹信息。
///
/// 轨迹名称。
/// 轨迹生成方法。
void SaveTrajectoryInfo(string name, string method = "icsp");
///
/// 检查指定飞拍轨迹是否可执行。
///
/// 输出规划轨迹总时长。
/// 轨迹名称。
/// 轨迹生成方法。
/// 是否保存轨迹信息。
/// 轨迹是否有效。
bool IsFlyshotTrajectoryValid(out TimeSpan duration, string name, string method = "icsp", bool saveTrajectory = false);
///
/// 删除指定名称的飞拍轨迹。
///
/// 轨迹名称。
void DeleteTrajectory(string name);
///
/// 读取当前配置过的机器人名称。
///
/// 机器人名称。
string GetRobotName();
///
/// 读取当前机器人自由度。
///
/// 机器人自由度。
int GetDegreesOfFreedom();
}