use clap::{Parser, Subcommand};
use std::path::PathBuf;
#[derive(Parser, Debug)]
#[command(
name = "morpharch",
version,
about = "Monorepo architecture drift visualizer with animated TUI",
long_about = "MorphArch scans monorepo Git history, builds per-commit dependency graphs,\n\
calculates architecture drift scores, and visualizes them with an\n\
animated force-graph + timeline using ratatui.",
after_help = "Examples:\n morpharch scan . Scan repo: commits + graphs + drift scores\n morpharch scan ../myrepo Scan a specific repository\n morpharch watch . Scan + activate watch mode\n morpharch list-graphs Show last 10 graph snapshots\n morpharch list-drift Show drift score trend (last 20 commits)\n morpharch analyze Analyze HEAD commit drift\n morpharch analyze main~5 Analyze specific commit drift"
)]
pub struct Cli {
#[command(subcommand)]
pub command: Commands,
#[arg(short, long, global = true)]
pub verbose: bool,
}
#[derive(Subcommand, Debug)]
pub enum Commands {
Scan {
#[arg(default_value = ".")]
path: PathBuf,
#[arg(short = 'n', long, default_value = "0")]
max_commits: usize,
},
Watch {
#[arg(default_value = ".")]
path: PathBuf,
#[arg(short = 'n', long, default_value = "0")]
max_commits: usize,
#[arg(short = 's', long, default_value = "200")]
max_snapshots: usize,
},
ListGraphs {
#[arg(short, long, default_value = ".")]
path: PathBuf,
},
Analyze {
#[arg(default_value = None)]
commit: Option<String>,
#[arg(short, long, default_value = ".")]
path: PathBuf,
},
ListDrift {
#[arg(short, long, default_value = ".")]
path: PathBuf,
},
}