use clap::Parser;
use crate::config::{resolve_settings, ProfileSettings};
#[derive(Parser, Debug)]
#[command(author, version, about)]
pub struct CliArgs {
#[arg(short, long)]
pub verbose: bool,
#[arg(short, long)]
pub quiet: bool,
#[arg(short = 'm', long)]
pub video: bool,
#[arg(short = 'M', long = "video-only", conflicts_with = "video")]
pub video_only: bool,
#[arg(short, long, value_parser = ["shadow", "none"])]
pub decor: Option<String>,
#[arg(short = 'p', long)]
pub wallpaper: Option<String>,
#[arg(long = "wallpaper-padding", value_parser = clap::value_parser!(u32).range(1..=500))]
pub wallpaper_padding: Option<u32>,
#[arg(short, long, value_parser = ["white", "black", "transparent"])]
pub bg: Option<String>,
#[arg(short, long = "natural")]
pub natural: bool,
#[arg(short = 'l', long = "ls-win", visible_alias = "ls")]
pub list_windows: bool,
#[arg(short = 'w', long = "win-id")]
pub win_id: Option<u64>,
#[arg(short = 'e', long = "end-pause")]
pub end_pause: Option<String>,
#[arg(short = 's', long = "start-pause")]
pub start_pause: Option<String>,
#[arg(short = 'i', long = "idle-pause")]
pub idle_pause: Option<String>,
#[arg(short = 'o', long = "output")]
pub output: Option<String>,
#[arg(short = 'f', long, value_parser = clap::value_parser!(u8).range(4..=15))]
pub fps: Option<u8>,
#[arg()]
pub program: Option<String>,
#[arg(long)]
pub profile: Option<String>,
#[arg(long = "init-config")]
pub init_config: bool,
#[arg(long = "list-profiles")]
pub list_profiles: bool,
}
pub fn launch() -> CliArgs {
CliArgs::parse()
}
pub fn resolve_profiled_settings(args: &CliArgs) -> anyhow::Result<ProfileSettings> {
let config = crate::config::load_config()?;
let profile_name = args.profile.as_deref();
resolve_settings(config.as_ref(), profile_name, args)
}