use aoc_client::{LeaderboardId, PuzzleDay, PuzzleYear};
use clap::{Parser, Subcommand};
#[derive(Parser, Debug)]
#[command(version, about, infer_subcommands = true)]
pub struct Args {
#[command(subcommand)]
pub command: Option<Command>,
#[arg(short, long, global = true)]
pub day: Option<PuzzleDay>,
#[arg(short, long, global = true)]
pub year: Option<PuzzleYear>,
#[arg(short, long, alias = "session", global = true, value_name = "PATH")]
pub session_file: Option<String>,
#[arg(short, long, global = true)]
pub width: Option<usize>,
#[arg(short, long, global = true)]
pub overwrite: bool,
#[arg(short = 'I', long, global = true)]
pub input_only: bool,
#[arg(
short = 'P',
short_alias = 'D',
long,
alias = "description-only",
global = true,
conflicts_with = "input_only"
)]
pub puzzle_only: bool,
#[arg(
short,
long,
alias = "input",
global = true,
value_name = "PATH",
default_value = "input"
)]
pub input_file: String,
#[arg(
short,
long,
alias = "puzzle",
global = true,
value_name = "PATH",
default_value = "puzzle.md"
)]
pub puzzle_file: String,
#[arg(short = 'm', long, global = true)]
pub show_html_markup: bool,
#[arg(short, long, global = true)]
pub quiet: bool,
#[arg(long, global = true, conflicts_with = "quiet")]
pub debug: bool,
}
#[derive(Subcommand, Debug)]
pub enum Command {
#[command(visible_alias = "c")]
Calendar,
#[command(visible_alias = "d")]
Download,
#[command(visible_alias = "r")]
Read,
#[command(visible_alias = "s")]
Submit {
#[arg(value_parser = ["1", "2"])]
part: String,
answer: String,
},
#[command(visible_alias = "p")]
PrivateLeaderboard {
leaderboard_id: LeaderboardId,
},
}