using System.Threading;
using Svrnty.CQRS.Events.Abstractions.Configuration;
using System.Threading.Tasks;
namespace Svrnty.CQRS.Events.Abstractions.Streaming;
///
/// Provides effective stream configuration by merging stream-specific and global settings.
///
public interface IStreamConfigurationProvider
{
///
/// Gets the effective configuration for a stream (stream-specific merged with global defaults).
///
/// The name of the stream.
/// Cancellation token.
/// The effective stream configuration.
Task GetEffectiveConfigurationAsync(
string streamName,
CancellationToken cancellationToken = default);
///
/// Gets the retention policy for a stream.
///
/// The name of the stream.
/// Cancellation token.
/// The retention configuration if configured; otherwise null.
Task GetRetentionConfigurationAsync(
string streamName,
CancellationToken cancellationToken = default);
///
/// Gets the DLQ configuration for a stream.
///
/// The name of the stream.
/// Cancellation token.
/// The DLQ configuration if configured; otherwise null.
Task GetDeadLetterQueueConfigurationAsync(
string streamName,
CancellationToken cancellationToken = default);
///
/// Gets the lifecycle configuration for a stream.
///
/// The name of the stream.
/// Cancellation token.
/// The lifecycle configuration if configured; otherwise null.
Task GetLifecycleConfigurationAsync(
string streamName,
CancellationToken cancellationToken = default);
}