namespace NeonSprawl.Server.Game.PositionState;

/// <summary>Per-command movement sanity limits (NS-19). Bound from <c>Game:MovementValidation</c>.</summary>
public sealed class MovementValidationOptions
{
    /// <summary>When true, enforces <see cref="MaxHorizontalStep"/>. False (default) means no horizontal limit.</summary>
    public bool HorizontalStepEnabled { get; set; }

    /// <summary>Max horizontal displacement on X/Z in one move (meters). Inclusive at the limit.
    /// Only applied when <see cref="HorizontalStepEnabled"/> is true.</summary>
    public double MaxHorizontalStep { get; set; } = 18.0;

    /// <summary>Max absolute delta on Y in one move (meters). Inclusive at the limit.</summary>
    public double MaxVerticalStep { get; set; } = 2.2;

    /// <summary>When true, target must lie inside the axis-aligned district box (inclusive min/max).</summary>
    public bool DistrictBoundsEnabled { get; set; }

    public double DistrictMinX { get; set; } = -12.0;
    public double DistrictMaxX { get; set; } = 12.0;
    public double DistrictMinY { get; set; } = -2.0;
    public double DistrictMaxY { get; set; } = 24.0;
    public double DistrictMinZ { get; set; } = -12.0;
    public double DistrictMaxZ { get; set; } = 12.0;
}
