//! Arguments for `mcptest bakeoff` (WOR-1428).

use std::path::PathBuf;

use clap::{Args, ValueEnum};

/// Render the competitive bakeoff scorecard from the embedded, pinned matrix.
///
/// Offline and factual: it does not run competitors, it renders a dated
/// snapshot of how the MCP testing / eval / security / runtime landscape
/// compares, plus mcptest's own gaps (each linked to a Linear ticket).
#[derive(Debug, Args, Default)]
pub struct BakeoffArgs {
    /// Output format.
    #[arg(long, value_enum, value_name = "FORMAT", default_value_t = BakeoffFormat::Markdown)]
    pub format: BakeoffFormat,

    /// Write the scorecard here instead of stdout.
    #[arg(long, value_name = "PATH")]
    pub out: Option<PathBuf>,

    /// Overwrite the output if it already exists (off by default so a re-run
    /// cannot silently clobber a tracked or hand-edited file).
    #[arg(long)]
    pub force: bool,

    /// Exit non-zero (6) when mcptest has any open capability gap. Useful as a
    /// release check that the gap list stays tracked.
    #[arg(long)]
    pub fail_on_gap: bool,
}

/// Output formats for `mcptest bakeoff --format`.
#[derive(Copy, Clone, Debug, Default, PartialEq, Eq, ValueEnum)]
#[value(rename_all = "kebab-case")]
pub enum BakeoffFormat {
    /// Human-friendly dated Markdown scorecard (default).
    #[default]
    Markdown,
    /// The full matrix as one JSON object.
    Json,
}
