cargo-stale 0.1.2

A fast, concurrent tool to check for outdated dependencies in your Rust Cargo.toml file
use crate::cli::Cli;
use crate::types::Dependency;

pub fn print_results(results: &[Dependency], cli: &Cli) {
    let filtered_results: Vec<_> = if cli.outdated_only {
        results.iter().filter(|dep| dep.is_outdated()).collect()
    } else {
        results.iter().collect()
    };

    if filtered_results.is_empty() {
        if cli.outdated_only {
            println!("🎉 No outdated dependencies found!");
        } else {
            println!("❌ No dependencies found");
        }
        return;
    }

    println!("\n📊 Dependency Check Results:");
    println!("{:-<110}", "");
    println!(
        "{:<35} {:<20} {:<20} {:<15} {:<15}",
        "Dependency", "Current Version", "Latest Version", "Status", "Source"
    );
    println!("{:-<110}", "");

    let mut outdated_count = 0;

    for dep in &filtered_results {
        let status = match &dep.latest_version {
            Some(_latest) => {
                if dep.is_outdated() {
                    outdated_count += 1;
                    "🔴 Outdated"
                } else {
                    "✅ Latest"
                }
            }
            None => "❓ Unknown",
        };

        let latest_display = dep.latest_version.as_deref().unwrap_or("N/A");
        let name_with_type = format!("{}{}", dep.name, dep.dep_type);

        println!(
            "{:<35} {:<20} {:<20} {:<15} {:<15}",
            name_with_type, dep.current_version, latest_display, status, dep.source
        );
    }

    println!("{:-<110}", "");

    if outdated_count > 0 {
        println!("⚠️  Found {outdated_count} outdated dependencies");
        if cli.verbose {
            println!("💡 Use 'cargo update <crate_name>' to update specific dependencies");
        }
    } else if !cli.outdated_only {
        println!("🎉 All dependencies are up to date!");
    }
}