//! A shadow of `communique.usage.kdl` in usage's vocabulary, generated by
//! `cargo run -p xtask -- gen-shadow`.
//!
//! Do not edit: regenerate it. It exists to be compiled and parsed against, so
//! that the parser can be measured at a real CLI's scale rather than a toy one.
#![allow(dead_code, unused_imports)]

use usage_derive::{Args, Cli, Subcommands, ValueEnum};

/// Generate release notes for a git tag
#[derive(Args)]
#[usage(effect = "read")]
pub struct GenerateArgs {
    /// Push editorialized notes to the GitHub release
    #[usage(long = "github-release", effect = "write")]
    pub github_release: bool,
    /// Update CHANGELOG.md with the generated changelog entry
    #[usage(long = "changelog", effect = "write")]
    pub changelog: bool,
    /// Output concise changelog entry instead of detailed notes
    #[usage(long = "concise")]
    pub concise: bool,
    /// Generate notes without updating GitHub or verifying links
    #[usage(long = "dry-run", short = 'n')]
    pub dry_run: bool,
    /// GitHub repo in owner/repo format (auto-detected from git remote)
    #[usage(long = "repo", value_name = "REPO")]
    pub repo: ::std::option::Option<::std::string::String>,
    /// LLM model to use
    #[usage(long = "model", value_name = "MODEL")]
    pub model: ::std::option::Option<::std::string::String>,
    /// Max response tokens
    #[usage(long = "max-tokens", value_name = "MAX_TOKENS")]
    pub max_tokens: ::std::option::Option<::std::string::String>,
    /// LLM provider (anthropic or openai, auto-detected from model if omitted)
    #[usage(long = "provider", value_name = "PROVIDER")]
    pub provider: ::std::option::Option<::std::string::String>,
    /// Base URL for the LLM API
    #[usage(long = "base-url", value_name = "BASE_URL")]
    pub base_url: ::std::option::Option<::std::string::String>,
    /// Write output to a file instead of stdout
    #[usage(long = "output", short = 'o', effect = "write", value_name = "OUTPUT")]
    pub output: ::std::option::Option<::std::string::String>,
    /// Git tag to generate release notes for
    #[usage(arg, name = "TAG")]
    pub tag: ::std::string::String,
    /// Previous tag (auto-detected if omitted)
    #[usage(arg, name = "PREV_TAG")]
    pub prev_tag: ::std::option::Option<::std::string::String>,
}

/// Generate a communique.toml config file in the repo root
#[derive(Args)]
#[usage(effect = "write")]
pub struct InitArgs {
    /// Overwrite existing config file
    #[usage(long = "force", effect = "destructive")]
    pub force: bool,
}

/// Show the companies sponsoring communique and the jdx.dev open source tools
#[derive(Args)]
#[usage(effect = "read")]
pub struct SponsorsArgs {}

/// Generates a usage spec for the CLI
///
/// https://usage.jdx.dev
#[derive(Args)]
#[usage(effect = "read")]
pub struct UsageArgs {}

/// Editorialized release notes powered by AI
#[derive(Cli)]
#[usage(
    bin = "communique",
    name = "communique",
    version = "1.3.1",
    unknown_flags = "error"
)]
pub struct Cli {
    /// Enable verbose logging output
    #[usage(long = "verbose", short = 'v', global)]
    pub verbose: bool,
    /// Suppress progress output
    #[usage(long = "quiet", short = 'q', global)]
    pub quiet: bool,
    /// Path to config file (default: communique.toml in repo root)
    #[usage(long = "config", short = 'c', global, value_name = "CONFIG")]
    pub config: ::std::option::Option<::std::string::String>,
    #[usage(subcommand)]
    pub command: Commands,
}

#[derive(Subcommands)]
pub enum Commands {
    /// Generate release notes for a git tag
    #[usage(name = "generate")]
    Generate(Box<GenerateArgs>),
    /// Generate a communique.toml config file in the repo root
    #[usage(name = "init")]
    Init(Box<InitArgs>),
    /// Show the companies sponsoring communique and the jdx.dev open source tools
    #[usage(name = "sponsors")]
    Sponsors(Box<SponsorsArgs>),
    /// Generates a usage spec for the CLI
    #[usage(name = "usage", hide)]
    Usage(Box<UsageArgs>),
}
