use crate::config::{HttpMethod, OutputFormat};
use clap::{Parser, Subcommand};
use clap_complete::Shell;
#[derive(Parser)]
#[command(name = "thundra")]
#[command(version, about = "Thundra is an API benchmark tool built with Rust")]
pub struct Cli {
#[command(subcommand)]
pub command: Option<Commands>,
pub url: Option<String>,
#[arg(short, long, value_enum, default_value = "get")]
pub method: HttpMethod,
#[arg(short, long, default_value_t = 10)]
pub concurrency: usize,
#[arg(short = 'n', long, conflicts_with = "duration")]
pub requests: Option<usize>,
#[arg(short, long, conflicts_with = "requests")]
pub duration: Option<String>,
#[arg(short = 'H', long = "header")]
pub headers: Vec<String>,
#[arg(short, long)]
pub body: Option<String>,
#[arg(short, long, default_value_t = 30)]
pub timeout: u64,
#[arg(short = 'r', long)]
pub rate: Option<u64>,
#[arg(short = 'k', long)]
pub insecure: bool,
#[arg(short = 'o', long, value_enum, default_value_t = OutputFormat::Text)]
pub output: OutputFormat,
}
#[derive(Subcommand)]
pub enum Commands {
Completions {
#[arg(value_enum)]
shell: Shell,
},
}