using NATS.Server.Auth;
using NATS.Server.Protocol;

namespace NATS.Server;

public interface INatsClient
{
    ulong Id { get; }
    ClientKind Kind { get; }
    bool IsInternal => Kind.IsInternal();
    Account? Account { get; }
    ClientOptions? ClientOpts { get; }
    ClientPermissions? Permissions { get; }

    void SendMessage(string subject, string sid, string? replyTo,
        ReadOnlyMemory<byte> headers, ReadOnlyMemory<byte> payload);
    bool QueueOutbound(ReadOnlyMemory<byte> data);
    void RemoveSubscription(string sid);
}
