#[path = "src/cli.rs"]
mod cli;

use clap::Command;
use clap::CommandFactory;
use clap_complete::Shell::{Bash, Fish, Zsh};
use clap_complete::generate_to;
use clap_mangen::Man;
use cli::Args;
use std::fs;
use std::path::PathBuf;

static NAME: &str = "phraze";

fn generate_man_pages(cmd: Command) {
    let man_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("target/man");
    let mut buffer = Vec::default();

    Man::new(cmd.clone()).render(&mut buffer).unwrap();
    fs::create_dir_all(&man_dir).unwrap();
    fs::write(man_dir.join(NAME.to_owned() + ".1"), buffer).unwrap();
}

fn generate_shell_completions(mut cmd: Command) {
    let comp_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("target/completions");

    fs::create_dir_all(&comp_dir).unwrap();

    for shell in [Bash, Fish, Zsh] {
        generate_to(shell, &mut cmd, NAME, &comp_dir).unwrap();
    }
}

fn main() {
    let mut cmd = Args::command();
    cmd.set_bin_name(NAME);

    generate_man_pages(cmd.clone());
    generate_shell_completions(cmd);
}
