use crate::db::user_principal::check_name_available::check_user_name_available;
use dialtone_common::ap::pun::create_preferred_user_name;
use dialtone_common::ap::ActorType;
use dialtone_common::utils::make_acct::make_acct;
use sqlx::PgPool;
pub async fn check_user_name_availability(
pool: &PgPool,
user_name: &str,
host_name: &str,
) -> anyhow::Result<bool> {
let user_name = user_name.to_lowercase();
let person_pun = create_preferred_user_name(&user_name, &ActorType::Person);
let group_pun = create_preferred_user_name(&user_name, &ActorType::Group);
let service_pun = create_preferred_user_name(&user_name, &ActorType::Service);
let actor_ids = &[
person_pun.as_str(),
group_pun.as_str(),
service_pun.as_str(),
];
let acct_name = make_acct(&user_name, host_name);
let action = check_user_name_available(pool, &acct_name, actor_ids).await?;
Ok(action)
}