use anyhow::Result;
use colored::*;
use qdrant_client::qdrant::ScoredPoint;
use super::commands::{ FIELD_CHUNK_CONTENT, FIELD_ELEMENT_TYPE, FIELD_FILE_PATH, FIELD_LANGUAGE, FIELD_START_LINE,
};
pub fn print_search_results(results: &[ScoredPoint], query_text: &str) -> Result<()> {
if results.is_empty() {
println!("No results found for query: \"{}\"", query_text);
return Ok(());
}
println!("Search results for: \"{}\"", query_text.cyan());
println!("{}", "=".repeat(40));
for (idx, point) in results.iter().enumerate() {
let payload_map = &point.payload;
let file_path = payload_map
.get(FIELD_FILE_PATH)
.and_then(|v| v.as_str())
.map_or("<unknown_file>", |v| v)
.to_string();
let start_line = payload_map
.get(FIELD_START_LINE)
.and_then(|v| v.as_integer())
.map(|l| l as usize)
.unwrap_or(0);
let language = payload_map.get(FIELD_LANGUAGE).and_then(|v| v.as_str()).map_or("<unknown>", |v| v).to_string();
let element_type = payload_map.get(FIELD_ELEMENT_TYPE).and_then(|v| v.as_str()).map_or("<unknown>", |v| v).to_string();
let snippet = payload_map.get(FIELD_CHUNK_CONTENT).and_then(|v| v.as_str()).map_or("[Error: Snippet content missing]", |v| v).to_string();
println!(
"{}. Score: {:.4} | File: {} | Line: {} | Lang: {} | Type: {}",
(idx + 1).to_string().bold(),
point.score,
file_path.green(),
start_line.to_string().yellow(),
language,
element_type
);
println!("{}", "-".repeat(4));
for line in snippet.lines() {
println!(" {}", line);
}
println!("{}", "=".repeat(40)); }
Ok(())
}