use crate::commands::service::{is_xbp_project, load_xbp_config};
use crate::strategies::get_all_services;
use colored::Colorize;
pub async fn print_help() {
println!("\n{}", "XBP - XYLEX BUILD PACK".bright_magenta().bold());
println!("{}", "═".repeat(60).bright_black());
println!(
"\n{} {}",
"Usage:".bright_blue().bold(),
"xbp <command> [options]".bright_white()
);
println!("\n{}", "Core Commands".bright_blue().bold());
println!("{}", "─".repeat(40).bright_black());
println!(
" {} - List active ports and processes",
"ports".bright_cyan()
);
println!(" {} - Run initial setup", "setup".bright_cyan());
println!(" {} - Redeploy services", "redeploy".bright_cyan());
println!(" {} - Show configuration", "config".bright_cyan());
println!(" {} - Install packages", "install".bright_cyan());
println!(" {} - View logs", "logs".bright_cyan());
println!(" {} - List PM2 processes", "list".bright_cyan());
println!(" {} - Start PM2 process", "start".bright_cyan());
println!(" {} - Manage Nginx", "nginx".bright_cyan());
println!(
" {} - Manage floating IP and network config",
"network".bright_cyan()
);
println!(" {} - Run diagnostics", "diag".bright_cyan());
println!(" {} - Monitor services", "monitor".bright_cyan());
println!(
" {} - Save a PM2 restore snapshot",
"snapshot".bright_cyan()
);
println!(
" {} - Inspect and sync project versions",
"version".bright_cyan()
);
println!(" {} - Generation commands", "generate".bright_cyan());
if is_xbp_project().await {
println!("\n{}", "Service Commands".bright_blue().bold());
println!("{}", "─".repeat(40).bright_black());
println!(" services - List all services");
println!(" service <cmd> <name> - Run service command");
println!(" Commands: build, install, start, dev");
if let Ok(config) = load_xbp_config().await {
let services: Vec<crate::strategies::ServiceConfig> = get_all_services(&config);
if !services.is_empty() {
println!("\n{}", "Available Services".bright_green().bold());
println!("{}", "─".repeat(40).bright_black());
for service in services.iter().take(5) {
println!(
" • {} {}:{}",
service.name.bright_cyan(),
service.target.dimmed(),
service.port.to_string().yellow()
);
}
if services.len() > 5 {
println!(
" {} {} more",
"...and".dimmed(),
(services.len() - 5).to_string().dimmed()
);
}
}
}
}
println!("\n{}", "Options".bright_blue().bold());
println!("{}", "─".repeat(40).bright_black());
println!(" {} - Enable debug output", "--debug".yellow());
println!(" {} - Show help message", "--help".yellow());
println!(" {} - Open logs directory", "--logs".yellow());
println!("\n{}", "Examples".bright_blue().bold());
println!("{}", "─".repeat(40).bright_black());
println!(
" {} - Kill processes on port 3000",
"xbp ports -p 3000 --kill".dimmed()
);
println!(" {} - Install Docker", "xbp install docker".dimmed());
println!(
" {} - Start a process with PM2",
"xbp start \"npm start\" --name my-app".dimmed()
);
println!(" {} - Save the current PM2 state", "xbp snapshot".dimmed());
println!(" {} - Show local and git versions", "xbp version".dimmed());
println!(
" {} - Bump the patch version locally",
"xbp version patch".dimmed()
);
println!(
" {} - Tag and publish a GitHub release",
"xbp version release".dimmed()
);
println!(
" {} - Store OpenRouter API key globally",
"xbp config openrouter set-key".dimmed()
);
println!(
" {} - Store GitHub OAuth2 token globally",
"xbp config github set-key".dimmed()
);
if is_xbp_project().await {
println!(" {} - Build a service", "xbp service build zeus".dimmed());
println!(" {} - Redeploy a service", "xbp redeploy zeus".dimmed());
}
println!(
"\n{} {}",
"More info:".bright_blue().bold(),
"https://github.com/xylex-group/xbp".cyan()
);
}