use crate::commands::{Cli, Config, Result, configure::ConfigItems};
use clap::Parser;
use color_print::cprintln;
use inquire::Select;
#[derive(Parser, Debug)]
pub(crate) struct ConfigSet {
item: Option<ConfigItems>,
}
impl ConfigSet {
pub(crate) fn run(&self, _: &Cli) -> Result<()> {
let mut config = Config::load()?;
match &self.item {
Some(ConfigItems::TableStyle) => set_table_style(&mut config)?,
Some(ConfigItems::DeleteEmptyJobAfterInvoice) => {
delete_empty_job_after_export(&mut config)?
}
None => {
set_table_style(&mut config)?;
delete_empty_job_after_export(&mut config)?
}
};
Ok(())
}
}
fn delete_empty_job_after_export(config: &mut Config) -> Result<()> {
let values = vec!["delete", "leave"];
let start = match config.delete_empty_job_after_export {
true => 0,
false => 1,
};
if let Some(val) = Select::new("Delete empty jobs after invoice export default?", values)
.with_starting_cursor(start)
.prompt_skippable()?
{
config.delete_empty_job_after_export = val == "delete"
}
Ok(())
}
fn set_table_style(config: &mut Config) -> Result<()> {
let values = vec!["rounded", "markdown", "empty"];
let start = values
.iter()
.position(|value| value == &config.table_style.to_string())
.expect("internal error");
if let Some(val) = Select::new("Table style?", values)
.with_starting_cursor(start)
.prompt_skippable()?
{
config.table_style = val.parse()?;
cprintln!("Table style set to <s>{val}</>");
}
Ok(())
}