use crate::config::loader;
use anyhow::{anyhow, Result};
use std::path::Path;
pub fn list_environments(project_path: &Path) -> Result<String> {
let config = loader::load_config_toml(project_path)?;
if config.environments.is_empty() {
return Err(anyhow!("No environments defined"));
}
let mut env_names: Vec<_> = config.environments.keys().collect();
env_names.sort();
let mut output = String::from("Available environments:\n");
for env_name in env_names {
let env = &config.environments[env_name];
let env_line = format_environment_line(env_name, env);
output.push_str(&env_line);
}
Ok(output)
}
fn format_environment_line(name: &str, env: &crate::config::types::Environment) -> String {
let color_part = env
.color
.as_ref()
.map(|c| format!(" [{}]", c))
.unwrap_or_default();
let confirmation_part = if env.requires_confirmation.unwrap_or(false) {
" (requires confirmation)"
} else {
""
};
format!(
" {} {}{}{}\n",
name, env.description, color_part, confirmation_part
)
}