use std::io::Write;
use std::path::PathBuf;
use agileplus_sqlite::Storage;
use anyhow::{Context, Result};
use clap::Args;
#[derive(Debug, Args)]
#[command(name = "delete")]
pub struct DeleteCommand {
#[arg(short, long)]
db: PathBuf,
#[arg(short, long)]
id: String,
#[arg(short, long)]
force: bool,
}
impl DeleteCommand {
pub fn run(&self) -> Result<()> {
if !self.force {
eprint!("Delete graph '{}' from {}? [y/N] ", self.id, self.db.display());
std::io::stderr().flush().ok();
let mut answer = String::new();
std::io::stdin().read_line(&mut answer).ok();
if !matches!(answer.trim().to_ascii_lowercase().as_str(), "y" | "yes") {
println!("aborted");
return Ok(());
}
}
let storage = Storage::open(&self.db)
.with_context(|| format!("Failed to open storage at: {}", self.db.display()))?;
let removed = storage
.delete_graph(&self.id)
.with_context(|| format!("Failed to delete graph: {}", self.id))?;
if removed {
println!("deleted: {}", self.id);
} else {
println!("not found: {}", self.id);
}
Ok(())
}
}