namespace NeonSprawl.Server.Game.PositionState;

/// <summary>
/// HTTP JSON body for <c>POST /game/players/{{id}}/move-stream</c> (NEO-22): ordered absolute
/// targets applied in one request; each leg uses the same rules as <see cref="MoveCommandRequest"/>.
/// </summary>
public sealed class MoveStreamRequest
{
    /// <summary>Maximum number of targets accepted per request (inclusive).</summary>
    public const int MaxTargets = 24;

    /// <summary>Schema version for this contract; must match <see cref="CurrentSchemaVersion"/>.</summary>
    public const int CurrentSchemaVersion = 1;

    /// <summary>Contract version; must equal <see cref="CurrentSchemaVersion"/>.</summary>
    public int SchemaVersion { get; init; }

    /// <summary>World targets applied in order; each must pass validation from the position after the previous apply.</summary>
    public IReadOnlyList<PositionVector>? Targets { get; init; }
}
