use anstream::println;
use clap::Args;
use cooklang::convert::{ConvertTo, ConvertValue, Converter, System};
#[derive(Debug, Args)]
pub struct ConvertArgs {
value: f64,
unit: String,
to: String,
#[arg(long, short = 'R')]
no_round: bool,
}
pub fn run(converter: &Converter, args: ConvertArgs) -> anyhow::Result<()> {
use owo_colors::OwoColorize;
let to = match args.to.as_str() {
"fit" => ConvertTo::SameSystem,
"metric" => ConvertTo::Best(System::Metric),
"imperial" => ConvertTo::Best(System::Imperial),
_ => ConvertTo::Unit(cooklang::convert::ConvertUnit::Key(&args.to)),
};
let (value, unit) = converter.convert(args.value.into(), args.unit.as_str().into(), to)?;
let ConvertValue::Number(mut n) = value else {
panic!("unexpected range value")
};
if !args.no_round {
n = (n * 1000.0).round() / 1000.0;
}
println!("{} {}", n, unit.italic());
Ok(())
}