use std::error::Error;
use clap::Args;
use libprintcalc::model::cost::CostDefaults;
use crate::ops;
#[derive(Args)]
pub struct ConfigArgs {
#[arg(short = 'e', long = "electricity-cost")]
pub electricity_cost: Option<f64>,
#[arg(short = 'r', long = "labor-rate")]
pub labor_rate: Option<f64>,
#[arg(long = "margin", alias = "markup")]
pub margin: Option<String>,
#[arg(short = 'c', long = "currency", value_name = "SYMBOL")]
pub currency: Option<String>,
}
pub fn run(args: ConfigArgs) -> Result<(), Box<dyn Error>> {
let mut config = ops::show_config()?;
let mut changed = false;
if let Some(v) = args.electricity_cost {
config.electricity_cost_per_kwh = v;
changed = true;
}
if let Some(v) = args.labor_rate {
config.labor_rate_per_hour = v;
changed = true;
}
if let Some(csv) = args.margin {
config.margin_percentages = super::parse_margins(&csv)?;
changed = true;
}
if let Some(symbol) = args.currency {
config.currency_symbol = symbol;
changed = true;
}
if changed {
ops::set_config(&config)?;
println!("saved config");
}
print_config(&config);
Ok(())
}
fn print_config(c: &CostDefaults) {
println!("electricity_cost_per_kwh: {}", c.electricity_cost_per_kwh);
println!("labor_rate_per_hour: {}", c.labor_rate_per_hour);
println!("margin_percentages: {:?}", c.margin_percentages);
println!("currency_symbol: {:?}", c.currency_symbol);
}