namespace NATS.Server.JetStream.Api;

public static class JetStreamApiSubjects
{
    public const string Info = "$JS.API.INFO";
    public const string ServerRemove = "$JS.API.SERVER.REMOVE";
    public const string AccountPurge = "$JS.API.ACCOUNT.PURGE.";
    public const string AccountStreamMove = "$JS.API.ACCOUNT.STREAM.MOVE.";
    public const string AccountStreamMoveCancel = "$JS.API.ACCOUNT.STREAM.MOVE.CANCEL.";
    public const string StreamCreate = "$JS.API.STREAM.CREATE.";
    public const string StreamInfo = "$JS.API.STREAM.INFO.";
    public const string StreamNames = "$JS.API.STREAM.NAMES";
    public const string StreamList = "$JS.API.STREAM.LIST";
    public const string StreamUpdate = "$JS.API.STREAM.UPDATE.";
    public const string StreamDelete = "$JS.API.STREAM.DELETE.";
    public const string StreamPurge = "$JS.API.STREAM.PURGE.";
    public const string StreamMessageGet = "$JS.API.STREAM.MSG.GET.";
    public const string StreamMessageDelete = "$JS.API.STREAM.MSG.DELETE.";
    public const string StreamSnapshot = "$JS.API.STREAM.SNAPSHOT.";
    public const string StreamRestore = "$JS.API.STREAM.RESTORE.";
    public const string StreamLeaderStepdown = "$JS.API.STREAM.LEADER.STEPDOWN.";
    public const string StreamPeerRemove = "$JS.API.STREAM.PEER.REMOVE.";
    public const string ConsumerCreate = "$JS.API.CONSUMER.CREATE.";
    public const string ConsumerInfo = "$JS.API.CONSUMER.INFO.";
    public const string ConsumerNames = "$JS.API.CONSUMER.NAMES.";
    public const string ConsumerList = "$JS.API.CONSUMER.LIST.";
    public const string ConsumerDelete = "$JS.API.CONSUMER.DELETE.";
    public const string ConsumerPause = "$JS.API.CONSUMER.PAUSE.";
    public const string ConsumerReset = "$JS.API.CONSUMER.RESET.";
    public const string ConsumerUnpin = "$JS.API.CONSUMER.UNPIN.";
    public const string ConsumerNext = "$JS.API.CONSUMER.MSG.NEXT.";
    public const string ConsumerLeaderStepdown = "$JS.API.CONSUMER.LEADER.STEPDOWN.";
    public const string DirectGet = "$JS.API.DIRECT.GET.";
    public const string MetaLeaderStepdown = "$JS.API.META.LEADER.STEPDOWN";

    // Internal replication subjects for cluster-wide JetStream state propagation.
    // These are NOT part of the public API — they are used between cluster peers
    // to replicate mutating operations (stream/consumer create/delete/purge).
    // Go reference: jetstream_cluster.go — internal replication via RAFT proposals.
    public const string InternalPrefix = "$JS.INTERNAL.";
    public const string InternalStreamCreate = "$JS.INTERNAL.STREAM.CREATE.";
    public const string InternalStreamDelete = "$JS.INTERNAL.STREAM.DELETE.";
    public const string InternalStreamPurge = "$JS.INTERNAL.STREAM.PURGE.";
    public const string InternalConsumerCreate = "$JS.INTERNAL.CONSUMER.CREATE.";
    public const string InternalConsumerDelete = "$JS.INTERNAL.CONSUMER.DELETE.";
}
