quick-arch 0.1.0

powerful CLI tool built in Rust that automates project scaffolding using JSON templates. Generate complete project structures with conditional features in seconds!
use colored::*;
use std::time::Duration;

pub fn print_header() {
    println!(
        "{}",
        "╔════════════════════════════════════════════════════════════╗".cyan()
    );
    println!(
        "{}",
        "║   🚀 Universal Project Structure Generator (Rust)          ║".cyan()
    );
    println!(
        "{}",
        "╚════════════════════════════════════════════════════════════╝".cyan()
    );
    println!();
}

pub fn print_step(current: u32, total: u32, action: &str, item_name: &str, status: Status) {
    let icon = match status {
        Status::Success => "".green(),
        Status::Skip => "".dimmed(),
    };

    let counter = format!("[{}/{}]", current, total).dimmed();
    let action_colored = action.yellow();
    let name_colored = item_name.cyan();

    println!("{} {} {}: {}", counter, action_colored, name_colored, icon);
}

pub fn print_section(title: &str) {
    println!();
    println!(
        "{}",
        format!("━━━━━━━━━━━━━━━━ {} ━━━━━━━━━━━━━━━━", title).cyan()
    );
    println!();
}

pub fn print_info(msg: &str) {
    println!("{}", format!("ℹ️  {}", msg).blue());
}

pub fn print_error(msg: &str) {
    eprintln!("{}", format!("{}", msg).red());
}

pub enum Status {
    Success,
    Skip,
}

pub fn print_summary(stats: &crate::config::GenerationStats, duration: Duration) {
    println!();
    println!(
        "{}",
        "╔════════════════════════════════════════════════════════════╗".cyan()
    );
    println!(
        "{}",
        "║                   ✨ Creation Summary                      ║".cyan()
    );
    println!(
        "{}",
        "╠════════════════════════════════════════════════════════════╣".cyan()
    );
    println!(
        "{} {:<30} {}",
        "".cyan(),
        "Project:",
        stats.project_name.bold()
    );
    println!(
        "{} {:<30} {}",
        "".cyan(),
        "Location:",
        stats.output_dir.dimmed()
    );
    println!(
        "{} {:<30} {}",
        "".cyan(),
        "Dirs Created:",
        stats.dirs_count.to_string().green()
    );
    println!(
        "{} {:<30} {}",
        "".cyan(),
        "Files Created:",
        stats.files_count.to_string().green()
    );
    println!(
        "{} {:<30} {}",
        "".cyan(),
        "Total Skipped:",
        stats.skipped_count.to_string().yellow()
    );

    let duration_str = format!("{:.2?}", duration);
    println!(
        "{} {:<30} {}",
        "".cyan(),
        "Duration:",
        duration_str.magenta()
    );
    println!(
        "{}",
        "╚════════════════════════════════════════════════════════════╝".cyan()
    );

    println!();
    println!("{}", "🎉 Done! Happy coding!".bright_green().bold());
}