use bytesize::ByteSize;
use clap::Parser;
use csscolorparser::Color as CColor;
use std::fs::File;
use std::time::SystemTime;
extern crate bytesize;
mod divider;
mod messenger;
mod pdf;
mod utils;
use crate::messenger::Messenger;
use pdf::generate_pdf;
#[derive(Parser, Debug, Clone)]
#[command(author, version, about, arg_required_else_help(true))]
pub struct Args {
#[arg(id = "color")]
color: CColor,
#[arg(long, default_value_t = 1)]
pages: u16,
#[arg(short, long)]
output: Option<String>,
#[arg(short, long)]
size: Option<ByteSize>,
#[arg(id = "text")]
text: Vec<String>,
#[arg(long, default_value_t = false)]
no_random_string: bool,
#[arg(long, default_value_t = false)]
no_pagenum: bool,
#[arg(long, default_value_t = false)]
no_sizeinfo: bool,
#[arg(long, default_value_t = false)]
no_stats: bool,
#[arg(long, default_value_t = false)]
silent: bool,
#[arg(skip)]
random_string: String,
#[arg(long, default_value_t = false)]
debug: bool,
#[arg(long, default_value_t = false)]
super_precision: bool,
}
fn main() {
let start_time = SystemTime::now();
let mut args = Args::parse();
args.random_string = utils::generate_random(10);
let msg = Messenger::new(args.clone());
let output_file = match args.output {
Some(ref name) => String::from(name),
None => {
let color_name = match args.color.name() {
Some(name) => name,
None => {
utils::print_color_without_name();
std::process::exit(1);
}
};
format!("sample-{}-{}.pdf", color_name, &args.random_string)
}
};
let output_handle = File::create(&output_file).expect("Can't open file");
let file_size = generate_pdf(args, &msg, output_handle);
let milliseconds = start_time.elapsed().expect("SystemTime Failure");
msg.stats(format!(
"Finished in {milliseconds:?}. Final file size: {file_size}.\nFile name: {output_file}"
));
msg.silent(output_file);
}