use std::{path::PathBuf, time::Duration};
use candid::Principal;
use clap::Args;
use fqdn::FQDN;
use humantime::parse_duration;
use reqwest::Url;
use crate::tls::acme::{AcmeUrl, dns::cloudflare::DEFAULT_CLOUDFLARE_URL};
#[derive(Debug, Args)]
pub struct CustomDomainsCli {
#[clap(env, long, default_value = "icp0.io")]
pub custom_domains_ic_domain: FQDN,
#[clap(env, long, value_delimiter = ',', default_values = ["icp0.io", "ic0.app"])]
pub custom_domains_validation_domains: Vec<FQDN>,
#[clap(env, long, required = false)]
pub custom_domains_ic_identity: PathBuf,
#[clap(env, long)]
pub custom_domains_ic_root_key: Option<PathBuf>,
#[clap(env, long, required = false)]
pub custom_domains_canister_id: Principal,
#[clap(env, long, value_parser = parse_duration, default_value = "5s")]
pub custom_domains_canister_poll_interval: Duration,
#[clap(env, long, value_parser = parse_duration, default_value = "5m")]
pub custom_domains_canister_refresh_interval: Duration,
#[clap(env, long, default_value = DEFAULT_CLOUDFLARE_URL)]
pub custom_domains_cloudflare_url: Url,
#[clap(env, long, required = false)]
pub custom_domains_cloudflare_token: String,
#[clap(env, long, required = false)]
pub custom_domains_encryption_key: String,
#[clap(env, long, default_value = "icp2.io")]
pub custom_domains_delegation_domain: FQDN,
#[clap(env, long, default_value = "le_stag")]
pub custom_domains_acme_url: AcmeUrl,
#[clap(env, long, required = false)]
pub custom_domains_acme_account: PathBuf,
#[clap(env, long, default_value = "1")]
pub custom_domains_workers_count: usize,
}