workflows 0.7.2

A cli tool for creating a seemless workflow with remote and local git repos
use std::{env, io};

mod repo;

mod intergrations;

mod config;

mod commands;

fn main() -> io::Result<()> {
    let args: Vec<String> = env::args().collect();

    if args.contains(&"--health".to_string()) {
        return commands::health_check();
    }

    if args.contains(&"--help".to_string()) || args.contains(&"-h".to_string()) {
        commands::show_help_dialog();
        return Ok(());
    }

    let config = config::get_config().unwrap_or_default();

    if args.contains(&"--delete".to_string()) || args.contains(&"-d".to_string()) {
        let project = args.get(2).cloned();
        return commands::delete_project(project, config);
    }

    if args.contains(&"--new".to_string()) || args.contains(&"-n".to_string()) {
        let project = commands::new_project(args.get(2).cloned(), config.clone())?;
        if let Some((project, project_dir)) = project {
            let project = repo::Repo::new(project, true, Some(project_dir));

            println!("Project {} created successfully!", project.name());

            return match config.general().open_new_projects() {
                true => intergrations::tmuxinator::run_tmuxinator(&project, config.tmuxinator()),
                false => Ok(()),
            };
        }
    }

    if args.contains(&"--clone".to_string()) || args.contains(&"-c".to_string()) {
        let repo = commands::git_clone(args.get(2).cloned(), &config);
        if let Some(repo) = repo {
            return intergrations::tmuxinator::run_tmuxinator(&repo, config.tmuxinator());
        }
    }

    if args.contains(&"--open".to_string()) || args.contains(&"-o".to_string()) {
        let project = args.get(2).cloned();
        if let Some(project_name) = project {
            return commands::open_specific_project(project_name, config);
        }
    }

    if args.contains(&"--borrow".to_string()) || args.contains(&"-b".to_string()) {
        return commands::borrow_project(config);
    }

    if args.contains(&"--list".to_string()) || args.contains(&"-l".to_string()) {
        let project_dir_filter = args.get(2).cloned();
        return commands::list_projects(project_dir_filter, config);
    }

    commands::open_project(config)
}