module Ouroboros.Cardano.Network.PeerSelection.Churn.ExtraArguments where

import Cardano.Network.ConsensusMode (ConsensusMode)
import Cardano.Network.PeerSelection.Bootstrap (UseBootstrapPeers)
import Control.Concurrent.Class.MonadSTM.Strict
import Ouroboros.Cardano.Network.Types (ChurnMode)
import Ouroboros.Network.BlockFetch.ConsensusInterface (FetchMode)
import Ouroboros.Network.PeerSelection.Governor.Types (PeerSelectionTargets)

data ExtraArguments m =
  ExtraArguments {
    forall (m :: * -> *). ExtraArguments m -> StrictTVar m ChurnMode
modeVar            :: StrictTVar m ChurnMode
  , forall (m :: * -> *). ExtraArguments m -> STM m FetchMode
readFetchMode      :: STM m FetchMode
  , forall (m :: * -> *). ExtraArguments m -> PeerSelectionTargets
genesisPeerTargets :: PeerSelectionTargets
  , forall (m :: * -> *). ExtraArguments m -> STM m UseBootstrapPeers
readUseBootstrap   :: STM m UseBootstrapPeers
  , forall (m :: * -> *). ExtraArguments m -> ConsensusMode
consensusMode      :: ConsensusMode
  }