use std::path::PathBuf;
use clap::Parser;
#[derive(Parser, Debug)]
pub struct MemArgs {
#[arg(value_name = "REF")]
pub reference: PathBuf,
#[arg(value_name = "READS", required = true, num_args = 1..)]
pub reads: Vec<PathBuf>,
#[arg(short = 'o', long = "output")]
pub output: Option<PathBuf>,
#[arg(long = "index")]
pub index: Option<PathBuf>,
#[arg(long = "fast-output")]
pub fast_output: bool,
#[arg(long = "max-alignments", default_value_t = 1)]
pub max_alignments: usize,
#[arg(long = "min-chain-ratio", default_value_t = 0.4)]
pub min_chain_ratio: f32,
#[arg(long = "dp-topk", default_value_t = 1)]
pub dp_topk: usize,
#[arg(long = "accept-enable", value_parser = clap::builder::BoolishValueParser::new())]
pub accept_enable: Option<bool>,
#[arg(long = "accept-span-slack", default_value_t = 15)]
pub accept_span_slack: usize,
#[arg(
long = "accept-min-id",
default_value_t = 98.5,
alias = "accept-min-identity"
)]
pub accept_min_identity: f32,
#[arg(
long = "accept-max-mism",
default_value_t = 5,
alias = "accept-max-mismatches"
)]
pub accept_max_mismatches: usize,
#[arg(long = "accept-only-top1", default_value_t = true, value_parser = clap::builder::BoolishValueParser::new())]
pub accept_only_top1: bool,
#[arg(long = "accept-require-score-margin", default_value_t = 0)]
pub accept_require_score_margin: i32,
#[arg(long = "debug-prefilter", default_value_t = 0, hide = true)]
pub debug_prefilter_n: usize,
#[arg(long = "debug-force-accept", hide = true)]
pub debug_force_accept: bool,
#[arg(long = "debug-force-accept-n", default_value_t = 100, hide = true)]
pub debug_force_accept_n: usize,
#[arg(short = 't', long = "threads", default_value_t = 8)]
pub threads: usize,
#[arg(short = 'K', long = "batch", default_value_t = 1_000_000)]
pub batch_bases: usize,
#[arg(short = 'x', long = "preset", default_value = "auto")]
pub preset: String,
#[arg(short = 'k', long = "seed-len")]
pub seed_len: Option<usize>,
#[arg(short = 'w', long = "window-len")]
pub window_len: Option<usize>,
#[arg(long = "long-threshold", default_value_t = 500)]
pub long_read_threshold: usize,
#[arg(short = 'A', default_value_t = 1)]
pub match_score: i32,
#[arg(short = 'B', default_value_t = 4)]
pub mismatch_penalty: i32,
#[arg(short = 'O', default_value_t = 6)]
pub gap_open: i32,
#[arg(short = 'E', default_value_t = 1)]
pub gap_extend: i32,
#[arg(short = 'R', long = "read-group")]
pub read_group: Option<String>,
}