use crate::entry::SortOrder;
use clap::{ArgGroup, Parser};
use std::path::PathBuf;
#[derive(Parser)]
#[command(name = "duvis", about = "Disk usage visualizer for both AI and humans")]
#[command(group(
ArgGroup::new("output")
.multiple(false)
.args(["json", "analyze", "ui"])
))]
pub struct Cli {
#[arg(default_value = ".")]
pub path: PathBuf,
#[arg(short, long, value_parser = positive_usize)]
pub depth: Option<usize>,
#[arg(short = 'n', long, value_parser = positive_usize)]
pub top: Option<usize>,
#[arg(long)]
pub json: bool,
#[arg(long)]
pub analyze: bool,
#[arg(long)]
pub ui: bool,
#[arg(long, default_value = "7515")]
pub port: u16,
#[arg(long, default_value = "size")]
pub sort: SortOrder,
#[arg(long)]
pub reverse: bool,
}
fn positive_usize(s: &str) -> Result<usize, String> {
let n: usize = s
.parse()
.map_err(|e: std::num::ParseIntError| e.to_string())?;
if n == 0 {
Err("must be ≥ 1".to_string())
} else {
Ok(n)
}
}