use std::io::{self, Write};
use std::time::Duration;
use indicatif::{ProgressBar, ProgressStyle};
use super::color::{red, white};
pub fn jarvis_talk(message: &str) {
println!("🤵 {}", white(message));
}
pub fn jarvis_notice(command: &str) {
println!("\n👉 {command}\n");
}
pub fn jarvis_read_file(path: &str) -> ProgressBar {
println!("📖 Reading file: {path}");
let spinner = ProgressBar::new_spinner();
spinner.enable_steady_tick(Duration::from_millis(80));
spinner
}
pub fn jarvis_write_file(path: &str) -> ProgressBar {
println!("📝 Writing file: {path}");
let spinner = ProgressBar::new_spinner();
spinner.enable_steady_tick(Duration::from_millis(80));
spinner
}
pub fn jarvis_spinner() -> ProgressBar {
let spinner = ProgressBar::new_spinner();
spinner.set_style(
ProgressStyle::default_spinner()
.template("🤵 {spinner}")
.expect("Invalid spinner template"),
);
spinner.enable_steady_tick(Duration::from_millis(80));
spinner
}
pub fn jarvis_print_prefix() {
print!("🤵 ");
}
pub fn jarvis_print_chunk(chunk: &str) {
print!("{}", white(chunk));
}
pub fn jarvis_print_end() {
println!();
}
pub fn jarvis_ask_investigate(exit_code: i32) -> bool {
print!(
"🤵 Sir, {} {}",
red(&format!(
"the command exited with an error (code: {exit_code})."
)),
white("Would you like to investigate? [Y/n]: ")
);
let _ = io::stdout().flush();
let mut input = String::new();
if io::stdin().read_line(&mut input).is_err() {
return false;
}
println!();
let trimmed = input.trim().to_lowercase();
trimmed.is_empty() || trimmed == "y" || trimmed == "yes"
}