Documentation
pub use clap;
use clap::{arg, Command};
use current_platform::CURRENT_PLATFORM;

pub fn cmdv(name: &'static str, ver: &str) -> Option<Command> {
  let cmd = Command::new(name)
    .disable_version_flag(true)
    .disable_help_flag(true)
    .arg(arg!(-v --version ...))
    .arg(arg!(
      - -vv "version detail"
    ))
    .arg(arg!(
      -h --help "print help"
    ));

  let m = cmd.clone().ignore_errors(true).get_matches();

  let mut vv = m.get_one("vv") == Some(&true);

  if let Some(n) = m.get_one::<u8>("version") {
    let n = *n;
    if n > 0 {
      if n == 1 {
        println!("{ver}");
        return None;
      }
      vv = true;
    }
  }

  if vv {
    println!(
      r#"ver:{}
target:{}"#,
      ver, CURRENT_PLATFORM
    );
    return None;
  }

  Some(cmd)
}

#[macro_export]
macro_rules! cmdv {
  (
    $($arg:expr),*
    $(,)?
  ) => {{
    if let Some(mut cmd) = $crate::cmdv(env!("CARGO_PKG_NAME"),env!("CARGO_PKG_VERSION")) {
      let mut cmd = cmd$(.arg($arg))*;
      let m = cmd.clone().get_matches();
      if let Some(help) = m.get_one::<bool>("help") && *help {
        cmd.print_help()?;
        None
      }else{
        Some((m, cmd))
      }
    } else {
      None
    }
  }};
}