use std::collections::HashMap;
use std::time::{Duration, SystemTime};
use super::NodeInfo;
pub fn get_nodes(discovered_nodes: &HashMap<String, NodeInfo>) -> Vec<&NodeInfo> {
discovered_nodes.values().collect()
}
pub fn get_node<'a>(discovered_nodes: &'a HashMap<String, NodeInfo>, node_id: &str) -> Option<&'a NodeInfo> {
discovered_nodes.get(node_id)
}
pub fn cleanup_stale_nodes(discovered_nodes: &mut HashMap<String, NodeInfo>, timeout: Duration) -> usize {
let now = SystemTime::now();
let initial_count = discovered_nodes.len();
discovered_nodes.retain(|_, node| now.duration_since(node.last_seen).map(|d| d < timeout).unwrap_or(false));
initial_count - discovered_nodes.len()
}
pub fn node_count(discovered_nodes: &HashMap<String, NodeInfo>) -> usize {
discovered_nodes.len()
}
pub fn get_nodes_by_type<'a>(discovered_nodes: &'a HashMap<String, NodeInfo>, node_type: &str) -> Vec<&'a NodeInfo> {
discovered_nodes
.values()
.filter(|node| node.node_type == node_type)
.collect()
}
pub fn clear(discovered_nodes: &mut HashMap<String, NodeInfo>) {
discovered_nodes.clear();
}