use ibdl_common::ImageBoards;
use std::path::PathBuf;
use clap::Parser;
use crate::{ImageBoardArg, RatingArg};
#[derive(Parser, Debug)]
#[clap(name = "Imageboard Downloader", author, version, about, long_about = None)]
pub struct Cli {
#[clap(value_parser, required = true)]
pub tags: Vec<String>,
#[clap(short, long, arg_enum, ignore_case = true, default_value_t = ImageBoardArg(ImageBoards::Danbooru))]
pub imageboard: ImageBoardArg,
#[clap(
short,
long,
parse(from_os_str),
value_name = "PATH",
help_heading = "SAVE"
)]
pub output: Option<PathBuf>,
#[clap(
short = 'd',
value_name = "NUMBER",
value_parser(clap::value_parser!(u8).range(1..=20)),
default_value_t = 5,
help_heading = "DOWNLOAD"
)]
pub simultaneous_downloads: u8,
#[clap(short, long, action, help_heading = "GENERAL")]
pub auth: bool,
#[clap(long, action, default_value_t = false, help_heading = "GENERAL")]
pub safe_mode: bool,
#[clap(
long = "id",
value_parser,
default_value_t = false,
help_heading = "SAVE"
)]
pub save_file_as_id: bool,
#[clap(short, long, value_parser, help_heading = "DOWNLOAD")]
pub limit: Option<u16>,
#[clap(long, value_parser, default_value_t = false, help_heading = "GENERAL")]
pub disable_blacklist: bool,
#[clap(long, value_parser, default_value_t = false, help_heading = "SAVE")]
pub cbz: bool,
#[clap(
short,
long,
value_parser,
help_heading = "DOWNLOAD",
value_name = "PAGE"
)]
pub start_page: Option<u16>,
#[clap(
short,
long,
value_parser,
default_value_t = false,
help_heading = "SAVE"
)]
pub update: bool,
#[clap(
short,
long,
value_parser,
help_heading = "GENERAL",
conflicts_with("safe-mode")
)]
pub rating: Vec<RatingArg>,
#[clap(long, value_parser, default_value_t = false, help_heading = "SAVE")]
pub ignore_unknown: bool,
#[clap(
long,
value_parser,
default_value_t = false,
help_heading = "SAVE",
conflicts_with("cbz")
)]
pub annotate: bool,
}