namespace NeonSprawl.Server.Game.PositionState;

/// <summary>Authoritative player positions — in-memory or PostgreSQL per configuration (NS-15 read API, NS-16 move apply, NS-17 persistence).</summary>
public interface IPositionStateStore
{
    /// <summary>Returns false if the player is unknown (HTTP 404). <paramref name="playerId"/> is trimmed; matching is ordinal case-insensitive.</summary>
    bool TryGetPosition(string playerId, out PositionSnapshot snapshot);

    /// <summary>
    /// Sets authoritative position to the given coordinates (v1 snap) and increments <see cref="PositionSnapshot.Sequence"/>.
    /// Returns false if the player is unknown.
    /// </summary>
    bool TryApplyMoveTarget(string playerId, double x, double y, double z, out PositionSnapshot snapshot);
}
