use crate::error::Result;
use crate::storage::mapping::StorageManager;
pub async fn execute(query: String, feature: bool, keyword: bool) -> Result<()> {
let storage = StorageManager::new()?;
let results = if feature {
storage.search_by_feature(&query)?
} else if keyword {
storage.search_by_keyword(&query)?
} else {
storage.search_services(&query)?
};
if results.is_empty() {
let search_type = if feature { "feature" } else if keyword { "keyword" } else { "services" };
println!("No {} found matching: {}", search_type, query);
return Ok(());
}
let search_type = if feature { "Features" } else if keyword { "Keywords" } else { "Services" };
println!("{} matching '{}':\n", search_type, query);
for (idx, result) in results.iter().enumerate() {
println!("{}. **{}** (Relevance: {:.1})", idx + 1, result.name, result.relevance_score);
if let Some(ref desc) = result.description {
println!(" š {}", desc);
}
if let Some(ref path) = result.path {
println!(" š {}", path);
}
if !result.docs.is_empty() {
println!(" š Documentation ({} files):", result.docs.len());
for doc in &result.docs {
println!(" ⢠{}", doc);
}
}
if idx < results.len() - 1 {
println!();
}
}
println!("\nš Summary: Found {} result(s)", results.len());
Ok(())
}