use clap::Parser;
use crate::explain::Format;
use crate::pattern;
use crate::pulse::HeartbeatOpts;
#[derive(Parser, Debug)]
#[command(
name = "ct-await",
version,
about = "Poll a read-only probe until it succeeds, an abort pattern appears, or the bound expires.",
long_about = "ct-await runs a gated read-only probe every --every seconds until the condition \
is established — probe exit 0, or a required --ok-match appearing in its output — \
or until an --err-match appears (immediate ERROR) or the required --timeout \
expires (ERROR). Observe an external process's effects without owning its \
execution (also reachable as `ct await`). See `ct-await --explain` for \
agent-oriented documentation."
)]
pub struct Cli {
#[arg(long)]
pub question: Option<String>,
#[arg(long, value_name = "SECS", default_value_t = 5.0)]
pub every: f64,
#[arg(long, value_name = "SECS")]
pub timeout: f64,
#[arg(long, value_name = "PATTERN")]
pub ok_match: Option<String>,
#[arg(long, value_name = "PATTERN")]
pub err_match: Option<String>,
#[arg(long, value_enum)]
pub mode: Option<pattern::Mode>,
#[command(flatten)]
pub heartbeat: HeartbeatOpts,
#[arg(long, alias = "emit-stdout")]
pub emit: Option<String>,
#[arg(long)]
pub emit_stderr: Option<String>,
#[arg(long)]
pub quiet: bool,
#[arg(long, value_enum, num_args = 0..=1, default_missing_value = "md")]
pub explain: Option<Format>,
#[arg(last = true, value_name = "PROBE...")]
pub probe: Vec<String>,
}