mod cats;
use clap::Parser;
use rand::Rng;
use std::process;
use std::{thread, time::Duration};
#[derive(Parser, Debug)]
#[command(author, version, about = "Display random ASCII cats in your terminal.", long_about = None)]
struct Args {
#[arg(long = "min-delay", default_value_t = 15, value_name = "SECONDS")]
min_delay: u64,
#[arg(long = "max-delay", default_value_t = 35, value_name = "SECONDS")]
max_delay: u64,
#[arg(long)]
once: bool,
}
fn main() {
let args = Args::parse();
if args.min_delay > args.max_delay {
eprintln!(
"Error: --min-delay ({}) cannot be greater than --max-delay ({}).",
args.min_delay, args.max_delay
);
process::exit(1);
}
let mut rng = rand::rng();
clear_terminal();
cats::print_random_cat();
if args.once {
return;
}
loop {
let seconds = rng.random_range(args.min_delay..=args.max_delay);
thread::sleep(Duration::from_secs(seconds));
clear_terminal();
cats::print_random_cat();
} }
fn clear_terminal() {
print!("{esc}[2J{esc}[1;1H", esc = 27 as char);
}