use crate::io::fs_store::FilesystemStore;
use crate::logger::FilesystemLogger;
use crate::wallet::{Wallet, WalletKeysManager};
use lightning::chain::chainmonitor;
use lightning::chain::keysinterface::InMemorySigner;
use lightning::ln::peer_handler::IgnoringMessageHandler;
use lightning::routing::gossip;
use lightning::routing::gossip::P2PGossipSync;
use lightning::routing::router::DefaultRouter;
use lightning::routing::scoring::ProbabilisticScorer;
use lightning::routing::utxo::UtxoLookup;
use lightning_net_tokio::SocketDescriptor;
use lightning_transaction_sync::EsploraSyncClient;
use std::sync::{Arc, Mutex};
pub(crate) type ChainMonitor = chainmonitor::ChainMonitor<
InMemorySigner,
Arc<EsploraSyncClient<Arc<FilesystemLogger>>>,
Arc<Wallet<bdk::database::SqliteDatabase>>,
Arc<Wallet<bdk::database::SqliteDatabase>>,
Arc<FilesystemLogger>,
Arc<FilesystemStore>,
>;
pub(crate) type PeerManager = lightning::ln::peer_handler::PeerManager<
SocketDescriptor,
Arc<ChannelManager>,
Arc<GossipSync>,
Arc<OnionMessenger>,
Arc<FilesystemLogger>,
IgnoringMessageHandler,
Arc<WalletKeysManager<bdk::database::SqliteDatabase>>,
>;
pub(crate) type ChannelManager = lightning::ln::channelmanager::ChannelManager<
Arc<ChainMonitor>,
Arc<Wallet<bdk::database::SqliteDatabase>>,
Arc<WalletKeysManager<bdk::database::SqliteDatabase>>,
Arc<WalletKeysManager<bdk::database::SqliteDatabase>>,
Arc<WalletKeysManager<bdk::database::SqliteDatabase>>,
Arc<Wallet<bdk::database::SqliteDatabase>>,
Arc<Router>,
Arc<FilesystemLogger>,
>;
pub(crate) type KeysManager = WalletKeysManager<bdk::database::SqliteDatabase>;
pub(crate) type Router =
DefaultRouter<Arc<NetworkGraph>, Arc<FilesystemLogger>, Arc<Mutex<Scorer>>>;
pub(crate) type Scorer = ProbabilisticScorer<Arc<NetworkGraph>, Arc<FilesystemLogger>>;
pub(crate) type GossipSync =
P2PGossipSync<Arc<NetworkGraph>, Arc<dyn UtxoLookup + Send + Sync>, Arc<FilesystemLogger>>;
pub(crate) type NetworkGraph = gossip::NetworkGraph<Arc<FilesystemLogger>>;
pub(crate) type OnionMessenger = lightning::onion_message::OnionMessenger<
Arc<WalletKeysManager<bdk::database::SqliteDatabase>>,
Arc<WalletKeysManager<bdk::database::SqliteDatabase>>,
Arc<FilesystemLogger>,
IgnoringMessageHandler,
>;