#[derive(Clone, Debug)]
pub struct ChannelBusConfig {
    pub namespace: String,
    pub room_cache_ttl_hint: Option<std::time::Duration>,
    pub catchup_limit: i64,
    pub signing_secret: Option<String>,
    pub seq_segment_size: Option<u64>,
    pub rate_limit_max_requests: Option<u32>,
    pub rate_limit_window_secs: Option<u64>,
    pub dedup_window_secs: Option<u64>,
    pub ack_timeout_secs: Option<u64>,
    pub revoke_window_secs: Option<u64>,
    pub circuit_breaker_failure_threshold: Option<u32>,
    pub circuit_breaker_success_threshold: Option<u32>,
    pub circuit_breaker_timeout_secs: Option<u64>,
    pub circuit_breaker_half_open_max_calls: Option<u32>,
}

impl Default for ChannelBusConfig {
    fn default() -> Self {
        Self {
            namespace: "/channel".to_owned(),
            room_cache_ttl_hint: Some(std::time::Duration::from_secs(300)),
            catchup_limit: 100,
            signing_secret: None,
            seq_segment_size: None,
            rate_limit_max_requests: None,
            rate_limit_window_secs: None,
            dedup_window_secs: None,
            ack_timeout_secs: None,
            revoke_window_secs: None,
            circuit_breaker_failure_threshold: None,
            circuit_breaker_success_threshold: None,
            circuit_breaker_timeout_secs: None,
            circuit_breaker_half_open_max_calls: None,
        }
    }
}
