#[cfg(feature = "agent")]
use crate::clone::CloneOrchestrator;
use std::sync::atomic::AtomicBool;
use std::sync::Arc;
use x402_gateway::state::AppState as GatewayState;
use x402_identity::InstanceIdentity;
#[cfg(feature = "soul")]
use x402_soul::{NodeObserver, SoulConfig, SoulDatabase};
#[cfg(feature = "erc8004")]
#[derive(Clone, Debug)]
pub struct SettlementEvent {
pub endpoint_slug: String,
pub tx_hash: Option<String>,
}
#[derive(Clone)]
pub struct NodeState {
pub gateway: GatewayState,
pub identity: Option<InstanceIdentity>,
#[cfg(feature = "agent")]
pub agent: Option<Arc<CloneOrchestrator>>,
#[cfg(not(feature = "agent"))]
pub agent: Option<()>,
pub started_at: chrono::DateTime<chrono::Utc>,
pub db_path: String,
pub clone_price: Option<String>,
pub clone_price_amount: Option<String>,
pub clone_max_children: u32,
pub agent_token_id: Option<String>,
#[cfg(feature = "erc8004")]
pub reputation_tx: Option<tokio::sync::mpsc::Sender<SettlementEvent>>,
#[cfg(feature = "soul")]
pub soul_db: Option<Arc<SoulDatabase>>,
#[cfg(not(feature = "soul"))]
pub soul_db: Option<()>,
pub soul_dormant: bool,
pub soul_alive: Option<Arc<AtomicBool>>,
#[cfg(feature = "soul")]
pub soul_config: Option<SoulConfig>,
#[cfg(not(feature = "soul"))]
pub soul_config: Option<()>,
#[cfg(feature = "soul")]
pub soul_observer: Option<Arc<dyn NodeObserver>>,
#[cfg(not(feature = "soul"))]
pub soul_observer: Option<()>,
pub cartridge_engine: Option<Arc<x402_cartridge::CartridgeEngine>>,
}