use clap::{Parser, Subcommand};

#[derive(Parser)]
#[command(name = "dolly", about, version)]
pub struct Cli {
    #[command(subcommand)]
    pub command: Command,
}

#[derive(Subcommand)]
pub enum Command {
    /// Clone a GitHub repository into the managed repos directory
    Clone {
        /// owner/repo on GitHub
        name: String,
    },

    /// Clone, build, and install a tool
    Install {
        /// owner/repo on GitHub
        name: String,
    },

    /// Update managed packages
    Update {
        /// Repo name (omit to update all)
        repo: Option<String>,

        /// Show what would be updated without doing it
        #[arg(long)]
        dry_run: bool,
    },

    /// Remove an installed package
    Remove {
        /// Repo name
        repo: String,

        /// Keep the cloned source repo
        #[arg(long)]
        keep_repo: bool,
    },

    /// List managed packages
    List {
        /// Show only packages with updates available
        #[arg(long)]
        outdated: bool,
    },

    /// Show details about a managed package
    Info {
        /// Repo name
        repo: String,
    },
}
