//! # Simple Agent Registration Example
//!
//! Demonstrates how to create an agent registry and register a basic agent.
//!
//! ## What This Example Shows
//! - Creating an `AgentRegistry` with capacity
//! - Defining agent metadata (name, role, capabilities, LLM provider)
//! - Registering an agent and retrieving its ID
//! - Querying registered agents
//!
//! ## Run
//! ```bash
//! cargo run --example 01-simple-agent -p vapora-agents
//! ```
//!
//! ## Expected Output
//! ```text
//! === Simple Agent Registration Example ===
//!
//! Creating agent registry with capacity 10...
//! Defined agent: "Developer A" (role: developer)
//! Registering agent with capabilities: [coding, testing]
//! Agent registered successfully
//! Agent ID: <uuid>
//! Agent Status: Ready
//!
//! === Registered Agents ===
//! Total: 1 agents
//! - Developer A (Role: developer, Status: Ready)
//! ```

use vapora_agents::{AgentMetadata, AgentRegistry};

fn main() {
    println!("=== Simple Agent Registration Example ===\n");

    // Step 1: Create an agent registry with a capacity limit
    let registry = AgentRegistry::new(10);
    println!("Created agent registry with capacity 10\n");

    // Step 2: Define agent metadata
    let agent = AgentMetadata::new(
        "developer".to_string(),                           // role
        "Developer A".to_string(),                         // name
        "claude".to_string(),                              // provider (Claude)
        "claude-opus-4-5".to_string(),                     // model
        vec!["coding".to_string(), "testing".to_string()], // capabilities
    );

    println!("Defined agent: \"{}\" (role: {})", agent.name, agent.role);
    println!("Capabilities: {:?}\n", agent.capabilities);

    // Step 3: Register the agent
    let agent_id = registry
        .register_agent(agent)
        .expect("Failed to register agent");
    println!("Agent registered successfully");
    println!("Agent ID: {}\n", agent_id);

    // Step 4: Query the registry to verify
    let all_agents = registry.list_all();
    println!("=== Registered Agents ===");
    println!("Total: {} agents", all_agents.len());
    for agent_info in all_agents {
        println!(
            "- {} (Role: {}, Status: {:?}, Capabilities: {})",
            agent_info.name,
            agent_info.role,
            agent_info.status,
            agent_info.capabilities.join(", ")
        );
    }

    // Step 5: Retrieve specific agent
    let retrieved = registry
        .get_agent(&agent_id)
        .expect("Failed to retrieve agent");
    println!(
        "\nRetrieved agent: {} (Status: {:?})",
        retrieved.name, retrieved.status
    );
}
