use anyhow::Result;
use bssh::cli::{Cli, Commands};
use clap::Parser;
mod app;
use app::{
cache::handle_cache_stats, dispatcher::dispatch_command, initialization::initialize_app,
query::handle_query, utils::show_usage,
};
#[tokio::main]
async fn main() -> Result<()> {
let args: Vec<String> = std::env::args().collect();
if args.len() == 1 {
show_usage();
std::process::exit(0);
}
let mut cli = Cli::parse();
if let Some(ref query) = cli.query {
handle_query(query);
return Ok(());
}
if matches!(cli.command, Some(Commands::List))
|| (cli.is_multi_server_mode() && cli.destination.as_deref() == Some("list"))
{
let config = bssh::config::Config::load_with_priority(&cli.config).await?;
bssh::commands::list::list_clusters(&config);
return Ok(());
}
if let Some(Commands::CacheStats {
detailed,
clear,
maintain,
}) = &cli.command
{
handle_cache_stats(*detailed, *clear, *maintain).await;
return Ok(());
}
let ctx = initialize_app(&mut cli, &args).await?;
dispatch_command(&cli, &ctx).await
}