namespace Svrnty.CQRS.Events.Abstractions.Subscriptions;
///
/// Defines how events are distributed to consumers in a subscription.
///
///
///
/// Broadcast: All consumers receive all events (pub/sub pattern).
/// Use for notifications where every consumer needs every event.
///
///
/// Exclusive: Only one consumer receives each event (queue pattern).
/// Use for work distribution where only one worker should process each event.
///
///
/// ConsumerGroup: Load-balanced distribution across group members (Kafka-style).
/// Use for scalable processing where multiple workers share the load.
///
///
/// ReadReceipt: Requires explicit confirmation that user saw the event.
/// Use for user notifications where you need to track delivered vs read status.
///
///
public enum SubscriptionMode
{
///
/// Broadcast mode: All consumers receive all events (publish/subscribe pattern).
/// Each consumer gets its own copy of every event.
///
Broadcast = 0,
///
/// Exclusive mode: Only one consumer receives each event (queue pattern).
/// Events are distributed to exactly one consumer in a round-robin fashion.
///
Exclusive = 1,
///
/// Consumer group mode: Load-balanced across group members (Kafka-style partitioning).
/// Events are distributed across all active consumers in the group for parallel processing.
///
ConsumerGroup = 2,
///
/// Read receipt mode: Requires explicit "user saw this" confirmation.
/// Tracks delivered vs read status, useful for user-facing notifications with unread counts.
///
ReadReceipt = 3
}