termicat 0.2.1

A fun ASCII cat art display that shows random cats every 15-35 seconds
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();
    } // slop code
}

fn clear_terminal() {
    print!("{esc}[2J{esc}[1;1H", esc = 27 as char);
}