use clap::{Parser, ValueEnum};
#[derive(Parser, Debug)]
#[command(version, about, long_about = None)]
pub struct Args {
#[arg(long)]
pub starting_url: Option<String>,
#[arg(long)]
pub browser_flags: Option<String>,
#[arg(long)]
pub port: Option<u16>,
#[arg(long, value_enum)]
pub browser: Option<BrowserTypeArg>,
#[arg(long)]
pub headless: bool,
#[arg(long)]
pub window_size: Option<String>,
#[arg(long)]
pub incognito: bool,
#[arg(long)]
pub disable_gpu: bool,
#[arg(long)]
pub no_sandbox: bool,
#[arg(long)]
pub disable_web_security: bool,
#[arg(long)]
pub allow_insecure_content: bool,
#[arg(long)]
pub ignore_ssl_errors: bool,
#[arg(long)]
pub disable_extensions: bool,
#[arg(long)]
pub disable_plugins: bool,
#[arg(long)]
pub disable_images: bool,
#[arg(long)]
pub disable_javascript: bool,
#[arg(long)]
pub user_agent: Option<String>,
#[arg(long)]
pub proxy_server: Option<String>,
#[arg(long)]
pub host_resolver_rules: Option<String>,
#[arg(long)]
pub user_data_dir: Option<String>,
#[arg(long)]
pub additional_args: Option<String>,
}
#[derive(Clone, Debug, ValueEnum)]
pub enum BrowserTypeArg {
Chrome,
Chromium,
Edge,
Brave,
Opera,
Vivaldi,
}
pub fn parse_window_size(size: &str) -> Option<(u32, u32)> {
let parts: Vec<&str> = size.split('x').collect();
if parts.len() == 2 {
if let (Ok(width), Ok(height)) = (parts[0].parse::<u32>(), parts[1].parse::<u32>()) {
Some((width, height))
} else {
None
}
} else {
None
}
}