use std::path::PathBuf;
use clap::{Parser, ValueEnum};
#[derive(Parser, Debug)]
#[command(name = "wickra-gym", version, about)]
pub struct Args {
#[arg(long)]
pub spec: PathBuf,
#[arg(long)]
pub data: PathBuf,
#[arg(long, value_enum, default_value_t = Policy::Always0)]
pub policy: Policy,
#[arg(long)]
pub steps: Option<u32>,
#[arg(long)]
pub seed: Option<u64>,
#[arg(long, value_enum, default_value_t = Format::Text)]
pub format: Format,
}
#[derive(Copy, Clone, Debug, ValueEnum)]
pub enum Policy {
#[value(name = "always-0")]
Always0,
#[value(name = "always-1")]
Always1,
#[value(name = "always-2")]
Always2,
Cycle,
}
impl Policy {
#[must_use]
pub fn action(self, step: u32) -> f64 {
match self {
Policy::Always0 => 0.0,
Policy::Always1 => 1.0,
Policy::Always2 => 2.0,
Policy::Cycle => f64::from(step % 3),
}
}
}
#[derive(Copy, Clone, Debug, ValueEnum)]
pub enum Format {
Text,
Json,
}