use clap::{
Parser, Subcommand,
builder::{
Styles,
styling::{AnsiColor, Effects},
},
};
use std::path::PathBuf;
pub const INFO: &str = "\
━━━━━━━━━━━━━━━━━━━━━━━━━━━
┏━┓╺┳╸┏━┓┏━╸┏━╸┏━╸┏━┓┏━╸╻ ╻
┗━┓ ┃ ┣━┫┃╺┓┣╸ ┃ ┣┳┛┣╸ ┃╻┃
┗━┛ ╹ ╹ ╹┗━┛┗━╸┗━╸╹┗╸┗━╸┗┻┛
━━━━━━━━━━━━━━━━━━━━━━━━━━━";
const STYLES: Styles = Styles::styled()
.header(AnsiColor::Green.on_default().effects(Effects::BOLD))
.usage(AnsiColor::Green.on_default().effects(Effects::BOLD))
.literal(AnsiColor::Cyan.on_default().effects(Effects::BOLD))
.placeholder(AnsiColor::Yellow.on_default());
#[derive(Debug, Parser)]
#[command(name = "stagecrew")]
#[command(version, about = INFO, styles = STYLES, long_about = None)]
pub struct Cli {
#[command(subcommand)]
pub command: Option<Command>,
#[command(flatten)]
pub verbose: clap_verbosity_flag::Verbosity,
}
#[derive(Debug, Default, Subcommand)]
pub enum Command {
#[default]
Tui,
Daemon {
#[arg(long, value_name = "HOURS")]
interval: Option<u32>,
#[arg(long)]
once: bool,
#[arg(long)]
scan_only: bool,
#[arg(long)]
dry_run: bool,
},
Status,
Scan {
#[arg(short, long)]
path: Option<PathBuf>,
},
#[command(subcommand)]
Config(ConfigCommand),
Init,
Add {
path: PathBuf,
#[arg(short, long)]
scan: bool,
},
}
#[derive(Debug, Subcommand)]
pub enum ConfigCommand {
Show,
Path,
DbPath,
LogPath,
Edit,
Schema,
}