use owo_colors::OwoColorize;
use crate::client::ApiClient;
use crate::config::{validate_config, PartiriConfig};
use crate::error::Result;
use crate::output::print_success;
pub fn run(client: &ApiClient, mut config: PartiriConfig) -> Result<()> {
if config.id.is_some() {
return Err(format!(
"Service already created (id: {}).\n Use 'partiri service push' to update it.",
config.id.as_deref().unwrap()
)
.into());
}
let results = validate_config(&config);
let errors: Vec<_> = results.iter().filter(|r| !r.ok).collect();
if !errors.is_empty() {
for e in &errors {
eprintln!(" {} {}: {}", "✗".red(), e.field.red(), e.message);
}
return Err("Config validation failed. Run 'partiri validate' for details.".into());
}
let service =
client.create_service(&config.service, &config.fk_project, &config.fk_workspace)?;
config.id = Some(service.id.clone());
config.save()?;
print_success(&format!("Service created — ID: {}", service.id.bold()));
if let Some(url) = &service.external_sd_url {
println!(" External URL: {}", url.cyan());
}
println!("\n Run {} to deploy.", "'partiri service deploy'".bold());
Ok(())
}