use std::path::Path;
use crate::app::Snapshot;
use crate::delete::{self, Claim, Confirmation};
use crate::nav;
use crate::projects::join::JoinState;
pub fn confirmation_of(snap: &Snapshot, ws: &Path) -> Option<Confirmation> {
let name = named_leaf(snap, ws)?;
let agents = snap.trees.get(ws).map_or(&[][..], |t| t.agents.as_slice());
Some(delete::confirmation(
&name,
&nav::convs::liveness(agents),
bound_claims(snap, &name),
))
}
pub fn agent_confirmation_of(
snap: &Snapshot,
ws: &Path,
root: &str,
) -> Option<delete::agent::AgentConfirmation> {
named_leaf(snap, ws)?;
let agents = snap.trees.get(ws).map_or(&[][..], |t| t.agents.as_slice());
Some(delete::agent::confirmation(root, agents))
}
fn named_leaf(snap: &Snapshot, ws: &Path) -> Option<String> {
crate::binding::named_of(&snap.workspaces, ws)
}
fn bound_claims(snap: &Snapshot, name: &str) -> Vec<Claim> {
snap.join_rows
.iter()
.filter(|r| r.workspace.as_deref() == Some(name) && r.state == JoinState::Bound)
.map(|r| Claim {
project: r.project.clone(),
id: r.ball_id.clone(),
})
.collect()
}