runmat 0.6.1

High-performance MATLAB/Octave syntax mathematical runtime
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(())
}