use clap::Args;
use super::types::{TaskDecomposeChildPolicyArg, TaskDecomposeFormatArg, TaskStatusArg};
use crate::agent;
#[derive(Args, Clone, Debug)]
pub struct TaskDecomposeArgs {
#[arg(value_name = "SOURCE")]
pub source: Vec<String>,
#[arg(long, value_name = "TASK_ID")]
pub attach_to: Option<String>,
#[arg(long, default_value_t = 3, value_parser = clap::value_parser!(u8).range(1..=10))]
pub max_depth: u8,
#[arg(long, default_value_t = 5, value_parser = clap::value_parser!(u8).range(1..=25))]
pub max_children: u8,
#[arg(long, default_value_t = 50, value_parser = clap::value_parser!(u16).range(1..=200))]
pub max_nodes: u16,
#[arg(long, value_enum, default_value_t = TaskStatusArg::Draft)]
pub status: TaskStatusArg,
#[arg(long, value_enum, default_value_t = TaskDecomposeChildPolicyArg::Fail)]
pub child_policy: TaskDecomposeChildPolicyArg,
#[arg(long)]
pub with_dependencies: bool,
#[arg(long, conflicts_with = "preview")]
pub write: bool,
#[arg(long, conflicts_with = "write")]
pub preview: bool,
#[arg(long, value_enum, default_value_t = TaskDecomposeFormatArg::Text)]
pub format: TaskDecomposeFormatArg,
#[arg(long)]
pub runner: Option<String>,
#[arg(long)]
pub model: Option<String>,
#[arg(short = 'e', long)]
pub effort: Option<String>,
#[arg(long = "repo-prompt", value_enum, value_name = "MODE")]
pub repo_prompt: Option<agent::RepoPromptMode>,
#[command(flatten)]
pub runner_cli: agent::RunnerCliArgs,
}