use reflow_actor::message::Message;
use reflow_assets::{AssetDB, AssetQuery};
use serde_json::Value;
use std::collections::HashMap;
use std::sync::Arc;
pub fn resolve_entities(
payload: &HashMap<String, Message>,
config: &HashMap<String, Value>,
db: &Arc<AssetDB>,
) -> Vec<String> {
if let Some(Message::String(s)) = payload.get("entity_id") {
return vec![s.to_string()];
}
if let Some(id) = config.get("entity").and_then(|v| v.as_str()) {
return vec![id.to_string()];
}
if let Some(arr) = config.get("entities").and_then(|v| v.as_array()) {
return arr
.iter()
.filter_map(|v| v.as_str().map(|s| s.to_string()))
.collect();
}
if let Some(selector) = config.get("selector") {
let q = AssetQuery::from_json(selector);
if let Ok(entries) = db.query(&q) {
return entries
.iter()
.map(|e| e.name.clone())
.collect::<std::collections::HashSet<_>>()
.into_iter()
.collect();
}
}
Vec::new()
}