use cloud_terrastodon_azure::AzureTenantId;
use cloud_terrastodon_azure::EntraUserId;
use cloud_terrastodon_azure::fetch_all_entra_users;
use cloud_terrastodon_user_input::prompt_line;
use eyre::Result;
use indexmap::IndexSet;
use std::collections::HashMap;
use tracing::info;
pub async fn bulk_user_id_lookup(tenant_id: AzureTenantId) -> Result<()> {
info!("Enter the user IDs, one per line. Enter a blank line to proceed.");
let mut user_ids = IndexSet::new();
loop {
let x = prompt_line("Enter user ID: ").await?;
if x.is_empty() {
break;
} else {
user_ids.insert(x.parse::<EntraUserId>()?);
}
}
let users = fetch_all_entra_users(tenant_id)
.await?
.into_iter()
.filter(|x| user_ids.contains(&x.id))
.map(|x| (x.id, x))
.collect::<HashMap<_, _>>();
for user_id in user_ids {
let Some(user) = users.get(&user_id) else {
println!("{user_id} - no user found");
continue;
};
println!("{} - {}", user_id, user.user_principal_name)
}
Ok(())
}