use agent_config::{by_id, Event, HookSpec, Matcher, Result, Scope};
fn main() -> Result<()> {
let project = tempfile::tempdir().expect("create tempdir");
let scope = Scope::Local(project.path().to_path_buf());
let spec = HookSpec::builder("myapp")
.command_program("myapp", ["hook", "claude"])
.matcher(Matcher::Bash)
.event(Event::PreToolUse)
.rules("Run `myapp lint` before committing.")
.try_build()?;
let claude = by_id("claude").expect("claude is registered");
let first = claude.install(&scope, &spec)?;
println!("--- first install ---");
println!("created : {:?}", first.created);
println!("patched : {:?}", first.patched);
println!("backups : {:?}", first.backed_up);
println!("noop : {}", first.already_installed);
let second = claude.install(&scope, &spec)?;
println!("\n--- second install (idempotent) ---");
println!("noop : {}", second.already_installed);
assert!(second.already_installed, "reinstall must be a no-op");
assert!(claude.is_installed(&scope, "myapp")?);
let removed = claude.uninstall(&scope, "myapp")?;
println!("\n--- uninstall ---");
println!("removed : {:?}", removed.removed);
println!("patched : {:?}", removed.patched);
println!("restored: {:?}", removed.restored);
println!("noop : {}", removed.not_installed);
assert!(!claude.is_installed(&scope, "myapp")?);
Ok(())
}