use super::types::Activity;
use crate::{
types::{Epoch, EpochDelta, Height, HeightDelta},
Automaton, Monitor, Reporter,
};
use commonware_cryptography::{
certificate::{Provider, Scheme},
Digest,
};
use commonware_p2p::Blocker;
use commonware_parallel::Strategy;
use commonware_runtime::buffer::paged::CacheRef;
use commonware_utils::NonZeroDuration;
use std::num::{NonZeroU64, NonZeroUsize};
pub struct Config<
P: Provider<Scope = Epoch>,
D: Digest,
A: Automaton<Context = Height, Digest = D>,
Z: Reporter<Activity = Activity<P::Scheme, D>>,
M: Monitor<Index = Epoch>,
B: Blocker<PublicKey = <P::Scheme as Scheme>::PublicKey>,
T: Strategy,
> {
pub monitor: M,
pub provider: P,
pub automaton: A,
pub reporter: Z,
pub blocker: B,
pub priority_acks: bool,
pub rebroadcast_timeout: NonZeroDuration,
pub epoch_bounds: (EpochDelta, EpochDelta),
pub window: NonZeroU64,
pub activity_timeout: HeightDelta,
pub journal_partition: String,
pub journal_write_buffer: NonZeroUsize,
pub journal_replay_buffer: NonZeroUsize,
pub journal_heights_per_section: NonZeroU64,
pub journal_compression: Option<u8>,
pub journal_page_cache: CacheRef,
pub strategy: T,
}