use super::{Error, Result, Settled, purge};
use crate::service::Warning;
use crate::state;
pub fn forget(settled: Settled, label: &str) -> Result<(String, Vec<Warning>)> {
let Settled {
_exclusive,
mut state,
ctx,
} = settled;
let live_uuid = crate::claude::load_config(&ctx)
.ok()
.as_ref()
.and_then(crate::claude::identity)
.map(|id| id.account_uuid);
let signed_in = match (&live_uuid, state.get(label)) {
(Some(uuid), Some(account)) => &account.account_uuid == uuid,
_ => state.active.as_deref() == Some(label),
};
if signed_in {
return Err(Error::CannotForgetActiveAccount {
label: label.to_string(),
});
}
let enrolled = state.labels();
let account = state.remove(label).ok_or_else(|| Error::AccountUnknown {
label: label.to_string(),
enrolled,
})?;
state::save(&ctx, &state)?;
crate::readings::forget(&ctx, &account.account_uuid);
let pending = purge(&ctx, &mut state);
Ok((
account.email,
(pending > 0)
.then_some(Warning::ParksPendingRemoval(pending))
.into_iter()
.collect(),
))
}