namespace Flyshot.Core.Planning.Sampling;

/// <summary>
/// 表示 J519 伺服链路在某一个物理发送周期上的轨迹采样结果。
/// </summary>
/// <param name="sampleIndex">从 0 开始的发送周期序号。</param>
/// <param name="sendTime">J519 物理发送时间，单位为秒。</param>
/// <param name="trajectoryTime">映射回规划轨迹的采样时间，单位为秒。</param>
/// <param name="speedRatio">生成该采样点时使用的速度倍率。</param>
/// <param name="jointsDegrees">J519 下发使用的角度制关节目标。</param>
public sealed class J519SendSample(
    long sampleIndex,
    double sendTime,
    double trajectoryTime,
    double speedRatio,
    IReadOnlyList<double> jointsDegrees)
{
    /// <summary>
    /// 获取从 0 开始的发送周期序号。
    /// </summary>
    public long SampleIndex { get; } = sampleIndex;

    /// <summary>
    /// 获取 J519 物理发送时间，单位为秒。
    /// </summary>
    public double SendTime { get; } = sendTime;

    /// <summary>
    /// 获取映射回规划轨迹的采样时间，单位为秒。
    /// </summary>
    public double TrajectoryTime { get; } = trajectoryTime;

    /// <summary>
    /// 获取生成该采样点时使用的速度倍率。
    /// </summary>
    public double SpeedRatio { get; } = speedRatio;

    /// <summary>
    /// 获取 J519 下发使用的角度制关节目标。
    /// </summary>
    public IReadOnlyList<double> JointsDegrees { get; } = jointsDegrees.ToArray();
}
