use crate::Component;
use clap::Parser;
#[derive(Parser)]
#[command(author, version, name = "Joular Core")]
pub struct Args {
#[arg(short = 'p', long = "pid", conflicts_with = "app")]
pub pid: Option<u32>,
#[arg(short = 'a', long = "app")]
pub app: Option<String>,
#[arg(short = 'f', long = "file")]
pub file: Option<String>,
#[arg(short = 'c', long = "component", value_enum)]
pub component: Option<Component>,
#[arg(short = 'i', long = "numeric")]
pub numeric_only: bool,
#[arg(short = 'o', long = "overwrite", requires = "file")]
pub overwrite: bool,
#[arg(
short = 'g',
long = "gui",
conflicts_with_all = ["pid", "app", "file", "overwrite", "silent", "numeric_only"]
)]
pub gui: bool,
#[arg(short = 'r', long = "ringbuffer")]
pub ringbuffer: bool,
#[arg(long = "api-port")]
pub api_port: Option<u16>,
#[arg(
long = "api-allowed-origin",
value_name = "ORIGIN",
requires = "api_port"
)]
pub api_allowed_origins: Vec<String>,
#[arg(short = 's', long = "silent")]
pub silent: bool,
#[arg(
long = "cpu-idle-baseline",
value_name = "WATTS",
default_value_t = 0.0,
conflicts_with = "calibrate_cpu_idle_baseline"
)]
pub cpu_idle_baseline: f64,
#[arg(
long = "app-refresh-interval",
value_name = "SECONDS",
default_value_t = 3
)]
pub app_refresh_interval: u64,
#[arg(long = "calibrate-cpu-idle-baseline")]
pub calibrate_cpu_idle_baseline: bool,
}