use std::path::PathBuf;
use clap::{Args, Parser, Subcommand, ValueEnum};
use url::Url;
#[derive(Debug, Parser)]
#[command(
name = "wepub",
version,
about = "Publish browser extensions to web stores"
)]
pub struct Cli {
#[arg(short = 'v', long = "verbose", global = true)]
pub verbose: bool,
#[arg(short = 'q', long = "quiet", global = true, conflicts_with = "verbose")]
pub quiet: bool,
#[command(subcommand)]
pub command: Commands,
}
#[derive(Debug, Subcommand)]
pub enum Commands {
Firefox(FirefoxArgs),
Chrome(ChromeArgs),
}
#[derive(Debug, Args)]
#[command(group(
clap::ArgGroup::new("release_notes_input")
.multiple(false)
.args(["release_notes", "release_notes_file"]),
))]
#[command(group(
clap::ArgGroup::new("approval_notes_input")
.multiple(false)
.args(["approval_notes", "approval_notes_file"]),
))]
pub struct FirefoxArgs {
#[arg(value_name = "ZIP")]
pub zip: PathBuf,
#[arg(long, env = "WEPUB_FIREFOX_ADDON_ID")]
pub addon_id: String,
#[arg(long, value_enum, default_value_t = ChannelArg::Listed)]
pub channel: ChannelArg,
#[arg(long, env = "WEPUB_FIREFOX_API_KEY")]
pub api_key: String,
#[arg(long, env = "WEPUB_FIREFOX_API_SECRET")]
pub api_secret: String,
#[arg(long, env = "WEPUB_FIREFOX_AMO_BASE_URL")]
pub amo_base_url: Option<Url>,
#[arg(long, value_delimiter = ',')]
pub compatibility: Vec<ApplicationArg>,
#[arg(long)]
pub release_notes: Option<String>,
#[arg(long, value_name = "PATH")]
pub release_notes_file: Option<PathBuf>,
#[arg(long)]
pub approval_notes: Option<String>,
#[arg(long, value_name = "PATH")]
pub approval_notes_file: Option<PathBuf>,
#[arg(long, value_name = "PATH")]
pub source: Option<PathBuf>,
}
#[derive(Debug, Clone, Copy, ValueEnum)]
pub enum ChannelArg {
Listed,
Unlisted,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, ValueEnum)]
pub enum ApplicationArg {
Firefox,
Android,
}
#[derive(Debug, Args)]
pub struct ChromeArgs {
#[arg(value_name = "ZIP")]
pub zip: PathBuf,
#[arg(long, env = "WEPUB_CHROME_PUBLISHER_ID")]
pub publisher_id: String,
#[arg(long, env = "WEPUB_CHROME_ITEM_ID")]
pub item_id: String,
#[arg(long, env = "WEPUB_CHROME_CLIENT_ID")]
pub client_id: Option<String>,
#[arg(long, env = "WEPUB_CHROME_CLIENT_SECRET")]
pub client_secret: Option<String>,
#[arg(long, env = "WEPUB_CHROME_REFRESH_TOKEN")]
pub refresh_token: Option<String>,
#[arg(long, env = "WEPUB_CHROME_ACCESS_TOKEN")]
pub access_token: Option<String>,
#[arg(long, value_enum, default_value_t = PublishTypeArg::Default)]
pub publish_type: PublishTypeArg,
#[arg(long)]
pub skip_review: bool,
#[arg(long, value_name = "N", value_parser = clap::value_parser!(u8).range(0..=100))]
pub deploy_percentage: Option<u8>,
#[arg(long, env = "WEPUB_CHROME_CWS_ROOT_URL")]
pub cws_root_url: Option<Url>,
#[arg(long, env = "WEPUB_CHROME_CWS_TOKEN_URL")]
pub cws_token_url: Option<Url>,
}
#[derive(Debug, Clone, Copy, ValueEnum)]
pub enum PublishTypeArg {
Default,
Staged,
}