use colored::Colorize;
use core::panic;
use directories::ProjectDirs;
use std::fs;
mod parse;
pub mod args;
use args::get_args;
mod shifts;
use shifts::Shifts;
mod utils;
use utils::{add_shift, list_all_shifts, list_shifts, remove_shift};
mod config;
use config::Config;
mod formaters;
fn main() {
let project_dirs = ProjectDirs::from("com", "tomkol", "shifty").expect("Config path not found");
if !fs::metadata(project_dirs.config_dir().to_str().unwrap()).is_ok() {
fs::create_dir_all(project_dirs.config_dir().to_str().unwrap()).unwrap();
}
let config_file = match fs::read_to_string(&format!(
"{}/config.json",
project_dirs.config_dir().to_str().unwrap()
)) {
Ok(conf) => conf,
Err(err) => match err.kind() {
std::io::ErrorKind::NotFound => {
println!("No config file found creating one.");
Config::new(project_dirs.config_dir().to_str().unwrap().to_string());
return;
}
_ => panic!("{}", err),
},
};
let config: Config = serde_json::from_str(&config_file).expect("Error reading config");
let args = get_args();
let db_path = format!("{}/db.csv", project_dirs.config_dir().to_str().unwrap());
let db = Shifts::from_file(db_path.clone());
if args.add {
if args.list || args.list_all || args.remove {
panic!("'--list', '--list-all', '--remove', '--add' can only be used independently");
}
add_shift(args, db, db_path, config);
} else if args.remove {
if args.list || args.list_all || args.add {
panic!("'--list', '--list-all', '--remove', '--add' can only be used independently");
}
remove_shift(args, db, db_path);
} else if args.list_all {
if args.list || args.remove || args.add {
panic!("'--list', '--list-all', '--remove', '--add' can only be used independently");
}
println!("{}", list_all_shifts(args, db, config));
} else if args.list {
if args.list_all || args.remove || args.add {
panic!("'--list', '--list-all', '--remove', '--add' can only be used independently");
}
println!("{}", list_shifts(args, db, config));
} else if args.change_config {
Config::new(project_dirs.config_dir().to_str().unwrap().to_string());
} else if args.show_config {
println!("{}", config);
} else if args.stats {
println!("{}", Shifts::stats(&db, config, args));
} else {
eprintln!(
"{}-h,--help\n-a,--add\n-r,--remove\n-l,--list\n-L,--list-all\n",
"No cli arguments found.\nyou must choose an action with one of these commands:\n\n"
.red()
);
}
}