use std::path::PathBuf;
use clap::{Parser, Subcommand, ValueEnum};
use clap_complete::Shell;
#[derive(Parser)]
#[command(
name = "opencode-ralph-loop-cli",
version,
about = "Scaffolder CLI for OpenCode Ralph Loop plugin",
long_about = None,
)]
pub struct Cli {
#[command(subcommand)]
pub command: Commands,
#[arg(long, global = true)]
pub verbose: bool,
#[arg(long, global = true)]
pub quiet: bool,
#[arg(long = "no-color", global = true, env = "NO_COLOR")]
pub no_color: bool,
#[arg(
long,
global = true,
value_name = "FORMAT",
default_value = "text",
env = "OPENCODE_RALPH_LOOP_CLI_OUTPUT"
)]
pub output: OutputFormat,
#[arg(
long,
global = true,
value_name = "FILE",
env = "OPENCODE_RALPH_LOOP_CLI_CONFIG"
)]
pub config: Option<std::path::PathBuf>,
#[arg(long = "json-schema", global = true)]
pub json_schema: bool,
}
#[derive(Subcommand)]
pub enum Commands {
Init(InitArgs),
Check(CheckArgs),
Uninstall(UninstallArgs),
List,
Doctor,
Completions {
shell: Shell,
},
}
#[derive(clap::Args, Debug)]
pub struct InitArgs {
#[arg(long, default_value = ".")]
pub path: PathBuf,
#[arg(long, env = "OPENCODE_RALPH_LOOP_CLI_FORCE")]
pub force: bool,
#[arg(long = "dry-run")]
pub dry_run: bool,
#[arg(
long = "plugin-version",
env = "OPENCODE_RALPH_LOOP_CLI_PLUGIN_VERSION"
)]
pub plugin_version: Option<String>,
#[arg(long = "no-package-json")]
pub no_package_json: bool,
#[arg(long = "no-gitignore")]
pub no_gitignore: bool,
#[arg(long = "no-manifest")]
pub no_manifest: bool,
#[arg(long = "install-hint")]
pub install_hint: bool,
}
#[derive(clap::Args, Debug)]
pub struct CheckArgs {
#[arg(long, default_value = ".")]
pub path: PathBuf,
#[arg(long)]
pub strict: bool,
#[arg(long = "exit-zero")]
pub exit_zero: bool,
}
#[derive(clap::Args, Debug)]
pub struct UninstallArgs {
#[arg(long, default_value = ".")]
pub path: PathBuf,
#[arg(long = "dry-run")]
pub dry_run: bool,
#[arg(long, env = "OPENCODE_RALPH_LOOP_CLI_FORCE")]
pub force: bool,
#[arg(long = "keep-state")]
pub keep_state: bool,
#[arg(long = "keep-node-modules")]
pub keep_node_modules: bool,
}
#[derive(ValueEnum, Clone, Default, Debug, PartialEq)]
pub enum OutputFormat {
#[default]
Text,
Json,
Ndjson,
Quiet,
}