bzzz-cli 0.1.0

Bzzz CLI - Command line interface for Agent orchestration
//! Validate command

use std::path::PathBuf;

use anyhow::{Context, Result};
use bzzz_core::{AgentSpecParser, SwarmFileParser};

pub async fn execute(file: PathBuf) -> Result<()> {
    println!("✅ Validating: {}", file.display());

    // Check if this is likely a SwarmFile
    // Convention: files with ".swarm" in the name (e.g., "foo.swarm.yaml") are SwarmFiles
    let filename = file
        .file_name()
        .map(|n| n.to_string_lossy().to_string())
        .unwrap_or_default();
    let is_swarm =
        filename.contains(".swarm.") || file.extension().map(|e| e == "swarm").unwrap_or(false);

    if is_swarm {
        let swarm = SwarmFileParser::from_yaml_file(&file)
            .with_context(|| format!("SwarmFile validation failed: {}", file.display()))?;
        println!("  Type: SwarmFile");
        println!("  ID: {}", swarm.id.as_str());
        println!("  Workers: {}", swarm.workers.len());
        println!("  Status: ✅ Valid");
    } else {
        let spec = AgentSpecParser::from_yaml_file(&file)
            .with_context(|| format!("Agent Spec validation failed: {}", file.display()))?;
        println!("  Type: Agent Spec");
        println!("  ID: {}", spec.id.as_str());
        println!("  Runtime: {:?}", spec.runtime.kind);
        println!("  Status: ✅ Valid");
    }

    Ok(())
}