use crate::commands::service::{is_xbp_project, load_xbp_config};
use crate::strategies::get_all_services;
pub async fn print_help() {
println!(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::");
println!(":.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.::.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.::.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:");
println!("::::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:.::::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:.::::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:.");
println!(":.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.::::::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.::::::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::::");
println!("::.:::.:::::.:::.:::.:::.:::.:::.::::::.:::.:::.:::.:::.:.:.::.:::.:::.:::.:::.:::.:::.:::.:::.:::.::.:::.:::.:::.:::.:::.:::.:::.:::.:.::::.:::.:::.:::.::::");
println!("::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:.:.:::::.:::::.:::.:::.:::.::####::.::.:::.:::.:*###=:.:::.::::::::::.:::.:::.:::.:::.:::.:::.:.::::.:::.:::.:::.::::");
println!("::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:.:.::::.:::.:::::=%%##-:.::.:::.:::#%%%+:::.:::.:.:.:.:::.:::.:::.:::.:::.:::.:::.:.::::.:::.:::.:::.::::");
println!("::.:::.:.:::.:::.:::.:::.:::.:::::.:::.:::.:::.:.:.:.:.:.:::.:.:::=%%%#::.::.:::.:*%#%+:.:::.::::::::::::.:::.:::.:::.:::.:::.:::.:::.:.::::.:::.:::.:::.::::");
println!("::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:.:.::::::.:::::.:.:=#%#%-:.::.:::#%#%+:::.:::.:.:.:.:.:::.:::.:::.:::.:::.:::.:::.:.::::.:::.:::.:::.::::");
println!("::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:.:.::.:.::.:.:.:::::=%%#%::.::.:#%%%+:.:.:.:::::::.::::::.:::.:::.:::.:::.:::.:::.:.::::.:::.:::.:::.::::");
println!("::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:.:.:::::.::::::.:.:.:=%%#%=:.:-#%#%+:::::::.:.:.:.:.:.:::.:::.:::.:::.:::.:::.:::.:.::::.:::.:::.:::.::::");
println!("::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:.:.:.:.::.:.:.:::::::=#%%#=::.-#%%#+:.:.:.:::::::::::::::.:::.:::.:::.:::.:::.:::.:.::::.:::.:::.:::.::::");
println!("::.:::.:::.:.::.::.:.:.:.::::::.::.:::.:.:.:.:.::..::::.::::::.:.:.:=%%##-:.::::#%%%+:::.:.:.:.:.:.:.::::.:::.:::.:::.:::.:::.:::.:.::::.:::.:::.:::.::::");
println!("::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:.:.:::.:.:.::::::=##%%-:::.:.::##%%+:.:::::::.:::.:.:::.:::.:::.:::.:::.:::.:::.:.::::.:::.:::.:::.::::");
println!("::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:.:.::.:::::::.:.::=%%%#::.::::::::##%#+::.:.:.::.::::::::.:::.:::.:::.:::.:::.:::.:.::::.:::.:::.:::.::::");
println!("::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:.:.:::.:.:.:.:::.=#%##-:::.:.:.:.::#%%%*::::.:.::.:.:.:::.:::.:::.:::.:::.:::.:::.:.::::.:::.:::.:::.::::");
println!("::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:.:.::::::::.:::%%##::.:.::::::::::*#%#-.:.:::.:::::::::.:::.:::.:::.:::.:::.:::.:.::::.:::.:::.:::.::::");
println!("::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:.:.::.:.:.:.::.::.::::::::.:.:.:.:.:::.:::::.:::.:.:.::::.:::.:::.:::.:::.:::.:::.:.::::.:::.:::.:::.::::");
println!("::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:.:.:::::::.:.::.::.:.:.:.::::::.:::.:::.:.:.:.:::::::.:::.:::.:::.:::.:::.:::.:::.:.::::.:::.:::.:::.::::");
println!("::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:::.:.:.:::::::.:.::.::.:.:.:.::::::.::.:::.:.:.:.:::::::.:::.:::.:::.:::.:::.:::.:::.:.::::.:::.:::.:::.::::");
println!();
println!("\x1b[93m📋 Usage:\x1b[0m \x1b[96mxbp <command> [options]\x1b[0m");
println!();
println!("\x1b[93m🚀 Commands:\x1b[0m");
println!(" \x1b[92m🔌 ports\x1b[0m [-p <port>] [--debug] [--kill] [-n] List active ports and processes, optionally search NGINX configs");
println!(" \x1b[92m⚙️ setup\x1b[0m Run initial setup commands");
println!(" \x1b[92m🔄 redeploy\x1b[0m [<service-name>] Redeploy (legacy redeploy.sh or specific service)");
println!(" \x1b[92m📡 redeploy_v2\x1b[0m [-p <password>] [-u <username>] [-h <host>] [-d <project_dir>] Remotely redeploy using redeploy.sh");
println!(" \x1b[92m📝 config\x1b[0m Display xbp.json contents");
println!(" \x1b[92m📦 install\x1b[0m <package> Install a package");
println!(" \x1b[92m📋 logs\x1b[0m View XBP logs");
if is_xbp_project().await {
println!();
println!("\x1b[93m🔧 Service Commands:\x1b[0m");
println!(" \x1b[92m📋 services\x1b[0m List all services");
println!(" \x1b[92m⚙️ service\x1b[0m <command> <service-name> Run command for a service");
println!(" \x1b[90m Commands: build, install, start, dev\x1b[0m");
println!(" \x1b[90m Example: xbp service build zeus\x1b[0m");
if let Ok(config) = load_xbp_config().await {
let services = get_all_services(&config);
if !services.is_empty() {
println!();
println!("\x1b[93m📦 Available Services:\x1b[0m");
for service in services.iter().take(5) {
println!(" \x1b[96m • {}\x1b[0m ({}:{})", service.name, service.target, service.port);
}
if services.len() > 5 {
println!(" \x1b[90m ... and {} more\x1b[0m", services.len() - 5);
}
}
}
}
println!();
println!("\x1b[93m💡 Examples:\x1b[0m");
println!(" \x1b[90mxbp ports -p 3000 --kill # Kill processes on port 3000\x1b[0m");
println!(" \x1b[90mxbp setup --debug # Run setup with debug output\x1b[0m");
println!(" \x1b[90mxbp install docker # Install Docker package\x1b[0m");
println!(" \x1b[90mxbp logs -c install # View install command logs\x1b[0m");
if is_xbp_project().await {
println!(" \x1b[90mxbp services # List all services\x1b[0m");
println!(" \x1b[90mxbp service build zeus # Build zeus service\x1b[0m");
println!(" \x1b[90mxbp redeploy zeus # Redeploy zeus service\x1b[0m");
}
println!(" \x1b[90mxbp -v # Display XBP version\x1b[0m");
println!();
}