use std::path::Path;
use crate::identity;
use crate::model::item::Capability;
use crate::model::project::is_ai_member;
use crate::store;
pub fn warn_unless_capable(root: &Path, required: Capability) -> bool {
let member_id = match identity::resolve_identity(root) {
Ok(id) => id.member,
Err(_) => return true, };
if member_id.is_empty() {
return true;
}
if is_ai_member(&member_id) && required == Capability::Manage {
eprintln!(
"Error: AI member {} cannot perform manage actions.",
member_id
);
return false;
}
let project_path = store::joy_dir(root).join(store::PROJECT_FILE);
let project = match store::read_project(&project_path) {
Ok(p) => p,
Err(_) => return true, };
if project.members.is_empty() {
return true;
}
match project.members.get(&member_id) {
Some(member) => {
if member.has_capability(&required) {
true
} else {
eprintln!(
"Warning: {} does not have '{}' capability. This action may be rejected by Joy Judge.",
member_id, required
);
false
}
}
None => {
eprintln!(
"Warning: {} is not a registered project member. Run `joy project member add {}`.",
member_id, member_id
);
false
}
}
}