use crate::commands::service::{is_xbp_project, load_xbp_config};
use crate::strategies::get_all_services;
use colored::Colorize;
use tracing::info;
pub async fn print_help() {
println!("\nXBP - eXtensible Build Pack");
println!("{}\n", "═".repeat(60));
println!("Usage: xbp <command> [options]");
println!("");
println!("Commands:");
println!(" ports - List active ports and processes");
println!(" setup - Run initial setup");
println!(" redeploy - Redeploy services");
println!(" config - Show configuration");
println!(" install - Install packages");
println!(" logs - View logs");
println!(" list - List PM2 processes");
println!(" start - Start PM2 process");
println!(" nginx - Manage Nginx");
println!(" diag - Run diagnostics");
println!(" monitor - Monitor services");
println!("");
info!("\n{}", "XBP - eXtensible Build Pack".bright_blue().bold());
info!("{}\n", "═".repeat(60).dimmed());
info!("{} {}", "Usage:".bright_blue(), "xbp <command> [options]".yellow());
info!("");
info!("{}", "Commands:".bright_blue().bold());
info!(" {} - List active ports and processes", "ports".cyan());
info!(" {} - Run initial setup", "setup".cyan());
info!(" {} - Redeploy services", "redeploy".cyan());
info!(" {} - Show configuration", "config".cyan());
info!(" {} - Install packages", "install".cyan());
info!(" {} - View logs", "logs".cyan());
info!(" {} - List PM2 processes", "list".cyan());
info!(" {} - Start PM2 process", "start".cyan());
info!(" {} - Manage Nginx", "nginx".cyan());
info!(" {} - Run diagnostics", "diag".cyan());
info!(" {} - Monitor services", "monitor".cyan());
info!("");
if is_xbp_project().await {
println!("Service Commands:");
println!(" services - List all services");
println!(" service <cmd> <name> - Run service command");
println!(" Commands: build, install, start, dev");
println!("");
info!("{}", "Service Commands:".bright_blue().bold());
info!(" {} - List all services", "services".cyan());
info!(" {} - Run service command", "service <cmd> <name>".cyan());
info!(" Commands: {}", "build, install, start, dev".yellow());
info!("");
if let Ok(config) = load_xbp_config().await {
let services = get_all_services(&config);
if !services.is_empty() {
println!("Available Services:");
for service in services.iter().take(5) {
println!(" • {} {}:{}", service.name, service.target, service.port);
}
if services.len() > 5 {
println!(" ...and {} more", services.len() - 5);
}
println!("");
info!("{}", "Available Services:".bright_green());
for service in services.iter().take(5) {
info!(" • {} {}:{}",
service.name.bright_cyan(),
service.target.dimmed(),
service.port.to_string().yellow()
);
}
if services.len() > 5 {
info!(" {} {} more", "...and".dimmed(), (services.len() - 5).to_string().dimmed());
}
info!("");
}
}
}
println!("Options:");
println!(" --debug - Enable debug output");
println!(" --help - Show help message");
println!(" --logs - Open logs directory");
println!("");
println!("Examples:");
println!(" xbp ports -p 3000 --kill - Kill processes on port 3000");
println!(" xbp install docker - Install Docker");
println!(" xbp start \"npm start\" --name my-app - Start a process with PM2");
if is_xbp_project().await {
println!(" xbp service build zeus - Build a service");
println!(" xbp redeploy zeus - Redeploy a service");
}
println!("");
println!("For more information: https://github.com/yourusername/xbp");
info!("{}", "Options:".bright_blue().bold());
info!(" {} - Enable debug output", "--debug".yellow());
info!(" {} - Show help message", "--help".yellow());
info!(" {} - Open logs directory", "--logs".yellow());
info!("");
info!("{}", "Examples:".bright_blue().bold());
info!(" {} - Kill processes on port 3000", "xbp ports -p 3000 --kill".dimmed());
info!(" {} - Install Docker", "xbp install docker".dimmed());
info!(" {} - Start a process with PM2", "xbp start \"npm start\" --name my-app".dimmed());
if is_xbp_project().await {
info!(" {} - Build a service", "xbp service build zeus".dimmed());
info!(" {} - Redeploy a service", "xbp redeploy zeus".dimmed());
}
info!("");
info!("For more information: {}", "https://github.com/yourusername/xbp".cyan());
}