module arch.node.types.anoma_config;

import prelude open;

{- Identity -}

import arch.node.engines.identity_management_config open;
import arch.node.engines.decryption_config open;
import arch.node.engines.encryption_config open;
import arch.node.engines.commitment_config open;

import arch.node.engines.verification_config open;
import arch.node.engines.reads_for_config open;
import arch.node.engines.signs_for_config open;
import arch.node.engines.naming_config open;

import arch.node.engines.local_key_value_storage_config open;
import arch.node.engines.logging_config open;
import arch.node.engines.wall_clock_config open;
import arch.node.engines.local_time_series_storage_config open;

{- Network -}

import arch.node.engines.net_registry_config open;
import arch.node.engines.router_config open;
import arch.node.engines.transport_protocol_config open;
import arch.node.engines.transport_connection_config open;
import arch.node.engines.pub_sub_topic_config open;
import arch.node.engines.storage_config open;

{- Ordering -}

import arch.node.engines.mempool_worker_config open;
import arch.node.engines.executor_config open;
import arch.node.engines.shard_config open;

{- Misc -}

import arch.node.engines.ticker_config open;

{- Templates -}

import tutorial.engines.template_config open;
import tutorial.engines.template_minimum_config open;

-- Add imports here
type PreCfg KVSKey KVSDatum Executable :=
  
  {- Identity -}

  | CfgIdentityManagement IdentityManagementCfg
  | CfgDecryption DecryptionCfg
  | CfgEncryption EncryptionCfg
  | CfgCommitment CommitmentCfg

  | CfgVerification VerificationCfg
  | CfgReadsFor ReadsForCfg
  | CfgSignsFor SignsForCfg
  | CfgNaming NamingCfg

  {- Hardware -}

  | CfgLocalKeyValueStorage LocalKVStorageCfg
  | CfgLogging LoggingCfg
  | CfgWallClock WallClockCfg
  | CfgLocalTSeries LocalTSStorageCfg

  {- Network -}

  | CfgRouter RouterCfg
  | CfgTransportProtocol TransportProtocolCfg
  | CfgTransportConnection TransportConnectionCfg
  | CfgPubSubTopic PubSubTopicCfg
  | CfgStorage StorageCfg

  {- Ordering -}

  | CfgMempoolWorker MempoolWorkerCfg
  | CfgExecutor (ExecutorCfg KVSKey Executable)
  | CfgShard ShardCfg

  {- Misc -}

  | CfgTicker TickerCfg

  {- Templates -}

  | CfgTemplate TemplateCfg
  | CfgTemplateMinimum TemplateMinimumCfg;

-- Add more configurations here

Cfg : Type := PreCfg String String ByteString;