use inquire::Confirm;
use owo_colors::OwoColorize;
use crate::client::ApiClient;
use crate::config::{PartiriConfig, CONFIG_FILE};
use crate::error::Result;
use crate::modules::init::{
prompt_for_pod, prompt_for_project, prompt_for_region, prompt_for_workspace,
};
use crate::output::print_success;
pub fn run(client: &ApiClient, mut config: PartiriConfig) -> Result<()> {
let mut changed = false;
let mut workspace_changed = false;
let mut region_changed = false;
let update_ws = Confirm::new("Update workspace?")
.with_default(false)
.prompt()
.map_err(|_| "Cancelled.")?;
if update_ws {
config.fk_workspace = prompt_for_workspace(Some(client))?;
workspace_changed = true;
changed = true;
}
let update_proj = if workspace_changed {
println!(" Workspace changed — project must be re-selected.");
true
} else {
Confirm::new("Update project?")
.with_default(false)
.prompt()
.map_err(|_| "Cancelled.")?
};
if update_proj {
config.fk_project = prompt_for_project(Some(client), &config.fk_workspace)?;
changed = true;
}
let update_region = Confirm::new("Update region?")
.with_default(false)
.prompt()
.map_err(|_| "Cancelled.")?;
if update_region {
config.service.fk_region = prompt_for_region(Some(client), &config.fk_workspace)?;
region_changed = true;
changed = true;
}
let update_pod = if region_changed {
println!(" Region changed — pod must be re-selected.");
true
} else {
Confirm::new("Update pod?")
.with_default(false)
.prompt()
.map_err(|_| "Cancelled.")?
};
if update_pod {
config.service.fk_pod = prompt_for_pod(Some(client), &config.fk_workspace)?;
changed = true;
}
if !changed {
println!("No changes.");
return Ok(());
}
config.save()?;
print_success(&format!("{} updated.", CONFIG_FILE.bold()));
Ok(())
}