use getopts::Options;

#[derive(Debug)]
pub struct Config {
    /// The directory documentation output was generated in
    pub doc_dir: String,
    /// The file documentation was generated for, with docck commands to check
    pub template: String,
}

/// Create a Config from a vector of command-line arguments
pub fn parse_config(args: Vec<String>) -> Config {
    let mut opts = Options::new();
    opts.reqopt("", "doc-dir", "Path to the documentation directory", "PATH")
        .reqopt("", "template", "Path to the template file", "PATH")
        .optflag("h", "help", "show this message");

    let (argv0, args_) = args.split_first().unwrap();
    if args.len() == 1 {
        let message = format!("Usage: {} <doc-dir> <template>", argv0);
        println!("{}", opts.usage(&message));
        std::process::exit(1);
    }

    let matches = opts.parse(args_).unwrap();

    if matches.opt_present("h") || matches.opt_present("help") {
        let message = format!("Usage: {} <doc-dir> <template>", argv0);
        println!("{}", opts.usage(&message));
        std::process::exit(1);
    }

    Config {
        doc_dir: matches.opt_str("doc-dir").unwrap(),
        template: matches.opt_str("template").unwrap(),
    }
}
