use clap::{ArgGroup, Parser};
use std::path::PathBuf;

/// Command-line interface für das Umbenennungsprogramm
#[derive(Parser, Debug, Clone)]
#[clap(about, version, author)]
#[clap(group(
    ArgGroup::new("mode")
        .args(&["dry_run", "force"])
        .multiple(false)
))]
pub struct Cli {
    /// Pfade (Dateien und Verzeichnisse) zum rekursiven Anpassen
    pub paths: Vec<PathBuf>,

    /// Explizite Konfigurationsdatei (bypassed Standard-Hierarchie)
    #[clap(long = "conf", value_name = "FILE")]
    pub config_file: Option<PathBuf>,

    /// Rekursive Verarbeitung von Unterverzeichnissen aktivieren
    #[clap(short = 'r', long)]
    pub recursive: bool,

    /// Ausgaben unterdrücken (keine Umbenennungsinfos auf stdout)
    #[clap(short, long)]
    pub quiet: bool,

    /// Nur anzeigen, aber keine realen Änderungen vornehmen (dry-run)
    #[clap(short = 'n', long = "dry-run", alias = "no-changes")]
    pub dry_run: bool,

    /// Existierende Dateien überschreiben
    #[clap(short, long)]
    pub force: bool,

    /// Zu ignorierende Muster (-e "*.py", mehrere können angegeben werden)
    #[clap(short = 'e', long, value_name = "PATTERN")]
    pub exclude: Vec<String>,

    /// Ausführliche Debug-Informationen
    #[clap(short = 'v', long)]
    pub verbose: bool,

    /// Erlaubt, auch das Wurzelverzeichnis anzupassen
    #[clap(long)]
    pub modify_root: bool,

    /// Auch symbolische Links und Special Files verarbeiten
    #[clap(long)]
    pub special: bool,

    /// Deaktiviert farbige Ausgabe
    #[clap(long)]
    pub no_color: bool,
}
