use clap::Parser;
use random_zh::{RandomZhOptions, random_zh};
#[derive(Parser)]
#[command(version, about, long_about = None)]
struct Cli {
#[arg(short, long)]
count: Option<usize>,
#[arg(short, long, value_name = "LEVEL_RANGE")]
level_range: Option<String>,
#[arg(short, long, value_name = "STROKE_COUNT_RANGE")]
stroke_count_range: Option<String>,
#[arg(short = 'd', long)]
allow_duplicates: bool,
}
fn main() {
let cli = Cli::parse();
let level_range = cli.level_range.as_deref().and_then(|lr| {
let parts: Vec<&str> = lr.split(',').collect();
if parts.len() == 2 {
Some((parts[0].parse::<u8>().ok()?, parts[1].parse::<u8>().ok()?))
} else {
None
}
});
let stroke_count_range = cli.stroke_count_range.as_deref().and_then(|scr| {
let parts: Vec<&str> = scr.split(',').collect();
if parts.len() == 2 {
Some((parts[0].parse::<u8>().ok()?, parts[1].parse::<u8>().ok()?))
} else {
None
}
});
let options = RandomZhOptions {
count: cli.count,
level_range,
stroke_count_range,
allow_duplicates: cli.allow_duplicates,
};
let characters = random_zh(options);
println!("{:?}", characters);
}