//! Example: RAG Query Optimization
//!
//! Demonstrates intelligent query enhancement through:
//! - Intent detection (factual, comparison, how-to, etc)
//! - Query rewriting and normalization
//! - Synonym expansion
//! - Key term extraction
//! - Context injection

use provisioning_rag::{IntentDetector, QueryOptimizer};

fn main() -> anyhow::Result<()> {
    println!("=== RAG Query Optimization Example ===\n");

    // Initialize query optimizer
    let optimizer = QueryOptimizer::new();

    println!("1. Intent Detection\n");
    println!("The system can detect 6 types of query intents:\n");

    let test_queries = vec![
        ("What is Kubernetes?", "Factual"),
        ("How do I deploy Kubernetes?", "How-to"),
        ("Why is scaling important?", "Why"),
        (
            "What's the difference between Docker and Kubernetes?",
            "Comparison",
        ),
        ("Can you explain how services work?", "Explanation"),
        ("Tell me random stuff", "General"),
    ];

    for (query, expected_intent) in test_queries {
        let intent = IntentDetector::detect(query);
        println!("Query: \"{}\"", query);
        println!(
            "Detected: {} (expected: {})\n",
            intent.name(),
            expected_intent
        );
    }

    println!("\n2. Query Optimization Pipeline\n");

    let test_query = "How can I deploy kubernetes applications?";
    println!("Original query: \"{}\"\n", test_query);

    let optimized = optimizer.optimize(test_query)?;

    println!("Optimization Results:");
    println!("  Intent: {}", optimized.intent.name());
    println!(
        "  Intent confidence: {:.1}%",
        optimized.intent_confidence * 100.0
    );
    println!("  Key terms: {:?}", optimized.key_terms);
    println!("  Optimized query: \"{}\"", optimized.optimized);
    println!("  Context injected: {}\n", optimized.context_injected);

    println!("\n3. Key Term Extraction\n");

    let queries_to_analyze = vec![
        "What is Kubernetes?",
        "How do I deploy applications?",
        "Compare Docker and Kubernetes",
        "Explain networking concepts",
    ];

    for query in queries_to_analyze {
        let terms = optimizer.extract_key_terms(query);
        println!("Query: \"{}\"", query);
        println!("Key terms: {:?}\n", terms);
    }

    println!("\n4. Query Normalization\n");

    let messy_queries = vec![
        "  What   IS   kubernetes?  ",
        "HOW DO I DEPLOY???",
        "TELL me ABOUT kubernetes",
    ];

    for query in messy_queries {
        let normalized = optimizer.normalize_query(query);
        println!("Original:  \"{}\"", query);
        println!("Normalized: \"{}\"\n", normalized);
    }

    println!("\n5. Synonym Expansion\n");

    let queries_with_synonyms = vec![
        "What is kubernetes?",
        "Deploy docker containers",
        "Kubernetes services",
    ];

    for query in queries_with_synonyms {
        let expanded = optimizer.rewrite_query(query);
        println!("Original:  \"{}\"", query);
        println!("Expanded:  \"{}\"\n", expanded);
    }

    println!("\n6. Context Injection\n");

    let conversation_context =
        "We previously discussed container orchestration and Kubernetes deployment strategies";
    let followup_query = "Tell me more about networking";

    let context_result = optimizer.inject_context(followup_query, conversation_context);

    println!("Follow-up query: \"{}\"", followup_query);
    println!("Conversation context: \"{}\"", conversation_context);
    println!("\nEnriched query:");
    println!("{}\n", context_result);

    println!("\n7. Full Optimization with Context\n");

    let optimized_with_context = optimizer.optimize_with_context(
        "Tell me more about services",
        Some("We discussed Kubernetes deployment earlier"),
    )?;

    println!("Original query: \"Tell me more about services\"");
    println!("Context: \"We discussed Kubernetes deployment earlier\"\n");
    println!("Full optimization result:");
    println!("  Intent: {}", optimized_with_context.intent.name());
    println!("  Key terms: {:?}", optimized_with_context.key_terms);
    println!(
        "  Context injected: {}",
        optimized_with_context.context_injected
    );
    println!("  Optimized: \"{}\"", optimized_with_context.optimized);
    println!();

    println!("\n8. Intent Confidence Levels\n");

    let confidence_examples = vec![
        ("What is it?", "High confidence factual query"),
        ("How do I?", "High confidence how-to query"),
        ("Tell me stuff", "Lower confidence general query"),
    ];

    for (query, description) in confidence_examples {
        let optimized = optimizer.optimize(query)?;
        println!("Query: \"{}\"", query);
        println!("Description: {}", description);
        println!("Confidence: {:.1}%\n", optimized.intent_confidence * 100.0);
    }

    println!("\n9. Use Case Recommendations\n");

    let use_cases = vec![
        (
            "What is Kubernetes?",
            "Factual",
            "Search for definitions and overview docs",
        ),
        (
            "How do I deploy?",
            "How-to",
            "Search for step-by-step guides and procedures",
        ),
        (
            "Why is it important?",
            "Why",
            "Search for explanations and rationale",
        ),
        (
            "Docker vs Kubernetes",
            "Comparison",
            "Search for comparison documents",
        ),
        (
            "Explain services",
            "Explanation",
            "Search for detailed explanations",
        ),
    ];

    for (query, intent, recommendation) in use_cases {
        println!("Query: \"{}\"", query);
        println!("Intent: {}", intent);
        println!("Recommendation: {}\n", recommendation);
    }

    println!("\n10. Best Practices for Query Optimization\n");

    println!("✓ Let the optimizer detect intent automatically");
    println!("✓ Use extracted key terms for focused searching");
    println!("✓ Inject conversation context for follow-ups");
    println!("✓ Customize synonyms for your domain");
    println!("✓ Monitor intent confidence scores");
    println!("✓ Use intent-specific search strategies");
    println!("✓ Cache optimized queries for repeated use\n");

    println!("\n11. Performance Characteristics\n");

    println!("Intent detection:       <2ms");
    println!("Query normalization:    <1ms");
    println!("Key term extraction:    <5ms");
    println!("Full optimization:      <10ms");
    println!("Context injection:      <1ms");
    println!("\nTotal optimization overhead: <15ms per query\n");

    println!("\n12. Integration with RAG System\n");

    println!("1. User submits question");
    println!("2. Optimizer analyzes and enhances query");
    println!("3. Intent guides search strategy");
    println!("4. Key terms improve retrieval");
    println!("5. Context enriches relevance");
    println!("6. Better answers generated\n");

    println!("✅ Query optimization example complete!\n");

    Ok(())
}
