use std::path::PathBuf;
use clap::{Parser, ValueEnum};
use crate::count::Tokenizer;
use crate::report::SortBy;
use crate::units::{Lines, Tokens};
#[derive(Clone, Copy, Debug, ValueEnum)]
pub enum Format {
Table,
Json,
Md,
}
#[derive(Parser, Debug)]
#[command(version)]
pub struct Args {
#[arg(default_value = ".")]
pub path: PathBuf,
#[arg(short, long, value_enum, default_value_t = Format::Table)]
pub format: Format,
#[arg(short, long, value_enum, default_value_t = SortBy::Tokens)]
pub sort: SortBy,
#[arg(short = 'n', long, default_value_t = 20)]
pub top: usize,
#[arg(short, long, value_enum, default_value_t = Tokenizer::O200k)]
pub tokenizer: Tokenizer,
#[arg(long, default_value_t = Tokens(8000))]
pub max_file_tokens: Tokens,
#[arg(long, default_value_t = Lines(500))]
pub max_file_lines: Lines,
#[arg(long, default_value_t = Lines(80))]
pub max_fn_lines: Lines,
#[arg(long)]
pub no_functions: bool,
#[arg(short, long)]
pub include: Vec<String>,
#[arg(short, long)]
pub exclude: Vec<String>,
#[arg(long)]
pub hidden: bool,
#[arg(long)]
pub no_default_excludes: bool,
#[arg(long)]
pub fail_on_warn: bool,
#[arg(long, value_name = "PATH")]
pub json_out: Option<PathBuf>,
}