use std::path::PathBuf;
use clap::{Args, Parser, Subcommand};
#[derive(Parser, Debug)]
#[command(name = "greentic-setup")]
#[command(version)]
#[command(about = "Greentic bundle setup CLI")]
#[command(after_help = r#"EXAMPLES:
Interactive wizard:
greentic-setup ./my-bundle
Preview without executing:
greentic-setup --dry-run ./my-bundle
Generate answers template:
greentic-setup --dry-run --emit-answers answers.json ./my-bundle
Apply answers file:
greentic-setup --answers answers.json ./my-bundle.gtbundle
Advanced (bundle subcommands):
greentic-setup bundle init ./my-bundle
greentic-setup bundle add pack.gtpack --bundle ./my-bundle
greentic-setup bundle status --bundle ./my-bundle
"#)]
pub struct Cli {
#[arg(value_name = "BUNDLE")]
pub bundle: Option<PathBuf>,
#[arg(long = "dry-run", global = true)]
pub dry_run: bool,
#[arg(long = "emit-answers", value_name = "FILE", global = true)]
pub emit_answers: Option<PathBuf>,
#[arg(long = "answers", short = 'a', value_name = "FILE", global = true)]
pub answers: Option<PathBuf>,
#[arg(long = "key", value_name = "KEY", global = true)]
pub key: Option<String>,
#[arg(long = "tenant", short = 't', default_value = "demo", global = true)]
pub tenant: String,
#[arg(long = "team", global = true)]
pub team: Option<String>,
#[arg(long = "env", short = 'e', default_value = "dev", global = true)]
pub env: String,
#[arg(long = "locale", global = true)]
pub locale: Option<String>,
#[arg(long = "advanced", global = true)]
pub advanced: bool,
#[arg(long = "ui", global = true, default_value_t = true)]
pub ui: bool,
#[arg(long = "no-ui", global = true)]
pub no_ui: bool,
#[command(subcommand)]
pub command: Option<Command>,
}
#[derive(Subcommand, Debug)]
pub enum Command {
#[command(subcommand)]
Bundle(BundleCommand),
}
#[derive(Subcommand, Debug, Clone)]
pub enum BundleCommand {
Init(BundleInitArgs),
Add(BundleAddArgs),
Setup(BundleSetupArgs),
Update(BundleSetupArgs),
Remove(BundleRemoveArgs),
Build(BundleBuildArgs),
List(BundleListArgs),
Status(BundleStatusArgs),
}
#[derive(Args, Debug, Clone)]
pub struct BundleInitArgs {
#[arg(value_name = "PATH")]
pub path: Option<PathBuf>,
#[arg(long = "name", short = 'n')]
pub name: Option<String>,
}
#[derive(Args, Debug, Clone)]
pub struct BundleAddArgs {
#[arg(value_name = "PACK_REF")]
pub pack_ref: String,
#[arg(long = "bundle", short = 'b')]
pub bundle: Option<PathBuf>,
#[arg(long = "tenant", short = 't', default_value = "demo")]
pub tenant: String,
#[arg(long = "team")]
pub team: Option<String>,
#[arg(long = "env", short = 'e', default_value = "dev")]
pub env: String,
#[arg(long = "dry-run")]
pub dry_run: bool,
}
#[derive(Args, Debug, Clone)]
pub struct BundleSetupArgs {
#[arg(value_name = "PROVIDER_ID")]
pub provider_id: Option<String>,
#[arg(long = "bundle", short = 'b')]
pub bundle: Option<PathBuf>,
#[arg(long = "answers", short = 'a')]
pub answers: Option<PathBuf>,
#[arg(long = "key", value_name = "KEY")]
pub key: Option<String>,
#[arg(long = "tenant", short = 't', default_value = "demo")]
pub tenant: String,
#[arg(long = "team")]
pub team: Option<String>,
#[arg(long = "env", short = 'e', default_value = "dev")]
pub env: String,
#[arg(long = "domain", short = 'd', default_value = "all")]
pub domain: String,
#[arg(long = "parallel", default_value = "1")]
pub parallel: usize,
#[arg(long = "backup")]
pub backup: bool,
#[arg(long = "skip-secrets-init")]
pub skip_secrets_init: bool,
#[arg(long = "best-effort")]
pub best_effort: bool,
#[arg(long = "non-interactive")]
pub non_interactive: bool,
#[arg(long = "dry-run")]
pub dry_run: bool,
#[arg(long = "emit-answers")]
pub emit_answers: Option<PathBuf>,
#[arg(long = "advanced")]
pub advanced: bool,
}
#[derive(Args, Debug, Clone)]
pub struct BundleRemoveArgs {
#[arg(value_name = "PROVIDER_ID")]
pub provider_id: String,
#[arg(long = "bundle", short = 'b')]
pub bundle: Option<PathBuf>,
#[arg(long = "tenant", short = 't', default_value = "demo")]
pub tenant: String,
#[arg(long = "team")]
pub team: Option<String>,
#[arg(long = "force", short = 'f')]
pub force: bool,
}
#[derive(Args, Debug, Clone)]
pub struct BundleBuildArgs {
#[arg(long = "bundle", short = 'b')]
pub bundle: Option<PathBuf>,
#[arg(long = "out", short = 'o')]
pub out: PathBuf,
#[arg(long = "tenant", short = 't')]
pub tenant: Option<String>,
#[arg(long = "team")]
pub team: Option<String>,
#[arg(long = "only-used-providers")]
pub only_used_providers: bool,
#[arg(long = "doctor")]
pub doctor: bool,
#[arg(long = "skip-doctor")]
pub skip_doctor: bool,
}
#[derive(Args, Debug, Clone)]
pub struct BundleListArgs {
#[arg(long = "bundle", short = 'b')]
pub bundle: Option<PathBuf>,
#[arg(long = "domain", short = 'd', default_value = "messaging")]
pub domain: String,
#[arg(long = "pack", short = 'p')]
pub pack: Option<String>,
#[arg(long = "format", default_value = "text")]
pub format: String,
}
#[derive(Args, Debug, Clone)]
pub struct BundleStatusArgs {
#[arg(long = "bundle", short = 'b')]
pub bundle: Option<PathBuf>,
#[arg(long = "format", default_value = "text")]
pub format: String,
}