use std::str::FromStr;
use clap::builder::TypedValueParser as _;
use clap::Parser;
use reqwest::Url;
#[derive(Parser, Debug, Clone)]
#[command(author,version, about, long_about = None)]
pub(crate) struct Codepecker {
#[arg(
short,
long,
value_name = "Url",
default_value = "http://127.0.0.1:8081"
)]
pub(crate) url: Option<Url>,
#[arg(
short,
long,
value_name = "Apikey",
default_value = "Oh9LHLfrLgk77e67DEZtiitOWZwvFVXI"
)]
pub(crate) key: Option<String>,
#[arg(long, value_name = "Proxy")]
pub(crate) proxy: Option<Url>,
#[arg(short, long, value_name = "Project Name", default_value = "test")]
pub(crate) project: Option<String>,
#[arg(long, value_name = "Project Group ID")]
pub(crate) group: Option<String>,
#[arg(short, long, value_name = "Project Language", default_value = "java")]
pub(crate) lang: Option<String>,
#[arg(short, long, value_name = "Scan Template",default_value = "default",value_parser = clap::builder::PossibleValuesParser::new(["default", "high", "user_defined"]))]
pub(crate) template: Option<String>,
#[arg(short, long, value_name = "Scan Rule")]
pub(crate) rule: Option<String>,
#[arg(short, long, value_name = "Zip File")]
pub(crate) file: Option<String>,
#[arg(short, long, value_name = "SVN")]
pub(crate) svn: Option<Url>,
#[arg(short, long, value_name = "GIT")]
pub(crate) git: Option<Url>,
#[arg(long, value_name = "SVN/GIT UserName")]
pub(crate) user: Option<String>,
#[arg(long, value_name = "SVN/GIT Password")]
pub(crate) password: Option<String>,
#[arg(long, value_name = "SVN/GIT Password")]
pub(crate) branch: Option<String>,
#[arg(long, value_name = "Task ID")]
pub(crate) task: Option<String>,
#[arg(long, value_name = "Scan Severity",default_value = "info",value_parser = clap::builder::PossibleValuesParser::new(["info", "low", "medium", "high", "critical"]))]
pub(crate) severity: Option<String>,
#[arg(
short,
long,
value_name = "Scan Result",
default_value = "results.json"
)]
pub(crate) output: Option<String>,
#[arg(
long,
default_value = "debug",
value_parser = clap::builder::PossibleValuesParser::new(["off", "debug", "info", "warn", "error"])
.map(|s| log::LevelFilter::from_str(&s).unwrap()),
)]
pub(crate) log_level: log::LevelFilter,
}