use clap::Args;
use crate::cli::queue::QueueShowFormat;
use crate::cli::task::args::types::TaskStatusArg;
#[derive(Args)]
#[command(
after_long_help = "Examples:\n ralph task show RQ-0001\n ralph task show RQ-0001 --format compact"
)]
pub struct TaskShowArgs {
#[arg(value_name = "TASK_ID")]
pub task_id: String,
#[arg(long, value_enum, default_value_t = QueueShowFormat::Json)]
pub format: QueueShowFormat,
}
#[derive(Args)]
pub struct TaskReadyArgs {
#[arg(long)]
pub note: Option<String>,
#[arg(value_name = "TASK_ID")]
pub task_id: String,
}
#[derive(Args)]
pub struct TaskStatusArgs {
#[arg(long)]
pub note: Option<String>,
#[arg(value_enum)]
pub status: TaskStatusArg,
#[arg(value_name = "TASK_ID...")]
pub task_ids: Vec<String>,
#[arg(long, value_name = "TAG")]
pub tag_filter: Vec<String>,
}
#[derive(Args)]
pub struct TaskDoneArgs {
#[arg(long)]
pub note: Vec<String>,
#[arg(value_name = "TASK_ID")]
pub task_id: String,
}
#[derive(Args)]
#[command(
about = "Mark a task as started (sets started_at and moves to doing)",
after_long_help = "Examples:\n ralph task start RQ-0001\n ralph task start --reset RQ-0001"
)]
pub struct TaskStartArgs {
#[arg(value_name = "TASK_ID")]
pub task_id: String,
#[arg(long)]
pub reset: bool,
}
#[derive(Args)]
pub struct TaskRejectArgs {
#[arg(long)]
pub note: Vec<String>,
#[arg(value_name = "TASK_ID")]
pub task_id: String,
}
#[derive(Args)]
#[command(
after_long_help = "Examples:\n ralph task schedule RQ-0001 '2026-02-01T09:00:00Z'\n ralph task schedule RQ-0001 'tomorrow 9am'\n ralph task schedule RQ-0001 'in 2 hours'\n ralph task schedule RQ-0001 'next monday'\n ralph task schedule RQ-0001 --clear"
)]
pub struct TaskScheduleArgs {
#[arg(value_name = "TASK_ID")]
pub task_id: String,
#[arg(value_name = "WHEN")]
pub when: Option<String>,
#[arg(long, conflicts_with = "when")]
pub clear: bool,
}