use anyhow::{bail, Result};
use clap::Args as ClapArgs;
use console::style;
use stout_state::{InstalledPackages, Paths};
#[derive(ClapArgs)]
pub struct Args {
pub formulas: Vec<String>,
}
pub async fn run(args: Args) -> Result<()> {
if args.formulas.is_empty() {
bail!("No formulas specified. Use 'stout pin' to see pinned packages.");
}
let paths = Paths::default();
let mut installed = InstalledPackages::load(&paths)?;
let mut unpinned_count = 0;
for name in &args.formulas {
if !installed.is_installed(name) {
eprintln!("{} {} is not installed", style("Warning:").yellow(), name);
continue;
}
if !installed.is_pinned(name) {
println!("{} {} is not pinned", style("•").dim(), name);
continue;
}
installed.unpin(name);
unpinned_count += 1;
println!("{} Unpinned {}", style("✓").green(), name);
}
if unpinned_count > 0 {
installed.save(&paths)?;
}
Ok(())
}