use crate::commands::add::{AddCommand, AddNodeArgs};
use crate::context::CliContext;
use crate::services::NodeGeneratorService;
use anyhow::Result;
pub async fn handle_add(ctx: &mut CliContext, command: &AddCommand) -> Result<()> {
match command {
AddCommand::Node(args) => handle_add_node(ctx, args).await,
}
}
async fn handle_add_node(ctx: &mut CliContext, args: &AddNodeArgs) -> Result<()> {
println!();
println!("Creating node: {}", args.name);
println!();
let project_root = &ctx.working_dir;
let generator = NodeGeneratorService::new();
generator
.generate_node(project_root, &args.name, args.description.as_deref())
.await?;
println!("Node created successfully!");
println!();
println!(" nodes/{}/", args.name);
println!(" ├── Cargo.toml");
println!(" └── src/");
println!(" ├── lib.rs");
println!(" ├── main.rs");
println!(" └── config.rs");
println!();
println!(" configs/nodes/{}/", args.name);
println!(" └── config.json");
println!();
println!("Node has been added to dev mode automatically.");
println!();
println!("Next steps:");
println!(" 1. Edit nodes/{}/src/lib.rs to implement your node logic", args.name);
println!(" 2. Update configs/nodes/{}/config.json with your settings", args.name);
println!(" 3. Run 'mecha10 dev' to test your node");
println!();
Ok(())
}