use clap::Parser;
use dotenvy::dotenv;
use nessus_launcher::{NessusClient, NessusConfig, Result};
use tracing::info;
use tracing_subscriber::FmtSubscriber;
#[derive(Parser, Debug)]
#[command(name = "nessus-cli")]
#[command(about = "Launch Nessus scans via CLI")]
struct Cli {
#[arg(long, num_args = 1..)]
scan: Option<Vec<u32>>,
}
#[tokio::main]
async fn main() -> Result<()> {
dotenv().ok();
let subscriber = FmtSubscriber::builder()
.with_max_level(tracing::Level::INFO)
.finish();
tracing::subscriber::set_global_default(subscriber)
.map_err(|e| nessus_launcher::NessusError::Other(format!("Failed to set logger: {e}")))?;
let args = Cli::parse();
let config = NessusConfig::from_env()?;
let client = NessusClient::new(config)?;
let scan_ids = match args.scan {
Some(ids) => ids,
None => NessusConfig::default_scan_ids_from_env(),
};
info!("Launching scans: {:?}", scan_ids);
client.launch_scans_parallel(scan_ids).await
}