//! # Samaharam (സമാഹാരം)
//!
//! Scalable heterogeneous zero-knowledge proof aggregation for EVM chains.
//!
//! ## Features
//!
//! - **Heterogeneous aggregation**: Aggregate proofs from different circuits
//! - **EVM-compatible**: BN254 curve with Solidity verifier generation
//! - **Type-safe**: TypeState pattern for compile-time proof lifecycle
//! - **Scalable**: Parallel processing and batched aggregation
//!
//! ## Quick Start
//!
//! ```rust,ignore
//! use samaharam::{Aggregator, Bn254};
//!
//! let aggregator = Aggregator::<Bn254>::builder()
//!     .with_srs(srs)
//!     .max_batch_size(32)
//!     .build()?;
//!
//! let vk_id = aggregator.register_circuit("transfer", vk);
//! let proof = Proof::new(data, public_inputs, vk_id);
//! let verified = proof.verify(&aggregator.registry())?;
//! aggregator.submit(verified)?;
//!
//! let aggregated = aggregator.aggregate()?;
//! ```

pub mod aggregator;
pub mod backend;
pub mod circuit;
pub mod config;
pub mod crypto;
pub mod error;
pub mod proof;
pub mod registry;
pub mod traits;

#[cfg(feature = "parallel")]
pub mod scalability;

#[cfg(feature = "solidity")]
pub mod solidity;

/// External proof adapters for aggregating proofs from other systems.
pub mod adapters;

pub mod client;

/// Testing utilities for generating real PLONK proofs.
#[cfg(any(test, feature = "testing"))]
pub mod testing;

// Re-exports for ergonomic API
pub use aggregator::Aggregator;
pub use backend::bn254::Bn254;
pub use config::AggregatorBuilder;
pub use crypto::TRANSCRIPT_VERSION;
pub use error::{ConfigError, Error};
pub use proof::{Aggregated, Batched, Pending, Proof, Verified};
pub use registry::{VkId, VkRegistry};
pub use traits::PairingEngine;

/// Type alias for the primary BN254-based aggregator
pub type Bn254Aggregator = Aggregator<Bn254>;
