partiri-cli 0.1.7

partiri CLI — Deploy and manage services on Partiri Cloud
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;

    // Step 1 — Workspace
    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;
    }

    // Step 2 — Project (forced when workspace changed)
    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;
    }

    // Step 3 — Region
    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;
    }

    // Step 4 — Pod (forced when region changed)
    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(())
}