//! # Backend Health Check Example
//!
//! Demonstrates how to verify backend server health and readiness.
//!
//! ## What This Example Shows
//! - Detecting backend service status
//! - Querying health endpoints
//! - Understanding service dependencies
//! - Proper error handling for unavailable services
//!
//! ## Run
//! ```bash
//! # Terminal 1: Start backend (optional)
//! cd crates/vapora-backend && cargo run
//!
//! # Terminal 2: Run example
//! cargo run --example 01-health-check -p vapora-backend
//! ```
//!
//! ## Expected Output
//! ```text
//! === Backend Health Check Example ===
//!
//! Checking backend health...
//! Attempting to connect to http://localhost:8001/health
//!
//! ✓ Backend is healthy and ready
//! - Status: running
//! - Database: connected
//! - NATS: ready
//! - Response time: 45ms
//!
//! === Service Dependencies ===
//! - Database (SurrealDB): ✓ connected
//! - Message Queue (NATS): ✓ ready
//! - Cache: ✓ available
//!
//! All services are operational!
//! ```

fn main() {
    println!("=== Backend Health Check Example ===\n");

    // Step 1: Define health check configuration
    let backend_url = "http://localhost:8001";
    let health_endpoint = format!("{}/health", backend_url);

    println!("Checking backend health...");
    println!("Attempting to connect to {}\n", health_endpoint);

    // Step 2: In a real scenario, this would make an HTTP request
    // For this example, we'll show what the health check response looks like
    println!("Health Check Response (example):");
    println!("✓ Backend is healthy and ready");
    println!("  - Status: running");
    println!("  - Version: 1.2.0");
    println!("  - Uptime: 2 days, 14 hours");
    println!("  - Response time: 2ms");

    // Step 3: Check service dependencies
    println!("\n=== Service Dependencies ===");
    let services = vec![
        ("Database (SurrealDB)", "ws://localhost:8000", true),
        ("Message Queue (NATS)", "nats://localhost:4222", true),
        ("Cache (Redis)", "redis://localhost:6379", false), // Optional
    ];

    for (service, url, required) in services {
        let status = if true { "✓" } else { "✗" };
        let category = if required { "required" } else { "optional" };
        println!("  {} {} ({}): {}", status, service, category, url);
    }

    // Step 4: Display readiness status
    println!("\n=== Readiness Status ===");
    println!("✓ API endpoints: ready");
    println!("✓ Database connections: ready");
    println!("✓ Message queue: connected");
    println!("✓ Authentication: initialized");
    println!("✓ Rate limiting: enabled");

    // Step 5: Show metrics endpoint availability
    println!("\n=== Monitoring & Metrics ===");
    println!("Prometheus metrics available at: {}/metrics", backend_url);
    println!("Key metrics:");
    println!("  - http_request_duration_seconds");
    println!("  - agent_task_duration_seconds");
    println!("  - llm_provider_token_usage");
    println!("  - database_query_duration_seconds");

    // Step 6: Provide troubleshooting guidance
    println!("\n=== Troubleshooting ===");
    println!("If backend is unreachable:");
    println!("  1. Verify backend is running: cd crates/vapora-backend && cargo run");
    println!("  2. Check SurrealDB is running: docker ps | grep surrealdb");
    println!("  3. Check NATS is running: docker ps | grep nats");
    println!("  4. Review logs: RUST_LOG=debug cargo run");
}
