use crate::csaf_traits::{CsafTrait, ProductGroupTrait, ProductTreeTrait};
use std::collections::{BTreeSet, HashSet};
pub fn resolve_product_groups(
doc: &impl CsafTrait,
product_groups: impl IntoIterator<Item = impl AsRef<str>>,
) -> Option<BTreeSet<String>> {
let product_tree = doc.get_product_tree()?;
let product_groups: HashSet<String> = product_groups.into_iter().map(|s| s.as_ref().to_owned()).collect();
let product_ids: BTreeSet<String> = product_tree
.get_product_groups()
.iter()
.filter(|x| product_groups.contains(x.get_group_id()))
.flat_map(|x| x.get_product_ids())
.map(|id| id.to_owned())
.collect();
if product_ids.is_empty() {
None
} else {
Some(product_ids)
}
}