use anyhow::Result;
use runmat_config::runtime::RunMatRuntimeConfig;
use runmat_gc::gc_stats;
use crate::presentation;
pub fn show_version(detailed: bool) {
println!(
"{}",
presentation::stdout().brand(format!("RunMat v{}", env!("CARGO_PKG_VERSION")))
);
if detailed {
println!(
"Built with Rust {}",
std::env::var("RUSTC_VERSION").unwrap_or_else(|_| "unknown".to_string())
);
println!(
"Target: {}",
std::env::var("TARGET").unwrap_or_else(|_| "unknown".to_string())
);
println!(
"Profile: {}",
if cfg!(debug_assertions) {
"debug"
} else {
"release"
}
);
}
}
pub async fn show_system_info(config: &RunMatRuntimeConfig) -> Result<()> {
let styles = presentation::stdout();
println!("{}", styles.brand("RunMat System Information"));
println!("{}", styles.muted("=========================="));
println!();
println!("{} {}", styles.label("Version:"), env!("CARGO_PKG_VERSION"));
println!(
"{} {}",
styles.label("Rust Version:"),
std::env::var("RUSTC_VERSION").unwrap_or_else(|_| "unknown".to_string())
);
println!(
"{} {}",
styles.label("Target:"),
std::env::var("TARGET").unwrap_or_else(|_| "unknown".to_string())
);
println!();
println!("{}", styles.heading("Runtime Configuration:"));
println!(
" JIT Compiler: {}",
if config.jit.enabled {
"enabled"
} else {
"disabled"
}
);
println!(" JIT Threshold: {}", config.jit.threshold);
println!(" JIT Optimization: {:?}", config.jit.optimization_level);
println!(
" GC Preset: {:?}",
config
.gc
.preset
.as_ref()
.map(|p| format!("{p:?}"))
.unwrap_or_else(|| "default".to_string())
);
if let Some(young_size) = config.gc.young_size_mb {
println!(" GC Young Generation: {young_size}MB");
}
if let Some(threads) = config.gc.threads {
println!(" GC Threads: {threads}");
}
println!(" GC Statistics: {}", config.gc.collect_stats);
println!();
println!("{}", styles.heading("Environment:"));
println!(" RUNMAT_CONFIG: {:?}", std::env::var("RUNMAT_CONFIG").ok());
println!(
" RUNMAT_SERVER_URL: {:?}",
std::env::var("RUNMAT_SERVER_URL").ok()
);
println!(" RUNMAT_ORG_ID: {:?}", std::env::var("RUNMAT_ORG_ID").ok());
println!(
" RUNMAT_PROJECT_ID: {:?}",
std::env::var("RUNMAT_PROJECT_ID").ok()
);
println!();
let gc_stats = gc_stats();
println!("{}", styles.heading("Garbage Collector Status:"));
println!("{}", gc_stats.summary_report());
println!();
println!("{}", styles.heading("Help:"));
println!(" See '{}' for commands.", styles.help("runmat --help"));
println!(
" See '{}' for subcommand details.",
styles.help("runmat <command> --help")
);
Ok(())
}