use std::time::Duration;
#[derive(Debug, Clone)]
pub struct DaemonRuntimeConfig {
pub daemon_id_override: Option<String>,
pub clone_worker_enabled: bool,
pub clone_worker_poll_interval: Duration,
pub clone_worker_lease_ttl_secs: i64,
pub clone_worker_max_attempts: i32,
pub spawn_legacy_workers: bool,
}
impl Default for DaemonRuntimeConfig {
fn default() -> Self {
Self {
daemon_id_override: std::env::var("ATHENA_DAEMON_ID")
.ok()
.filter(|value| !value.trim().is_empty()),
clone_worker_enabled: std::env::var("ATHENA_DAEMON_CLONE_ENABLED")
.map(|value| !matches!(value.as_str(), "0" | "false" | "FALSE" | "no" | "NO"))
.unwrap_or(true),
clone_worker_poll_interval: Duration::from_millis(
std::env::var("ATHENA_DAEMON_CLONE_POLL_MS")
.ok()
.and_then(|value| value.parse::<u64>().ok())
.unwrap_or(3_000)
.max(500),
),
clone_worker_lease_ttl_secs: std::env::var("ATHENA_DAEMON_CLONE_LEASE_TTL_SECS")
.ok()
.and_then(|value| value.parse::<i64>().ok())
.unwrap_or(900)
.max(60),
clone_worker_max_attempts: std::env::var("ATHENA_DAEMON_CLONE_MAX_ATTEMPTS")
.ok()
.and_then(|value| value.parse::<i32>().ok())
.unwrap_or(3)
.clamp(1, 10),
spawn_legacy_workers: std::env::var("ATHENA_DAEMON_SPAWN_LEGACY_WORKERS")
.map(|value| !matches!(value.as_str(), "0" | "false" | "FALSE" | "no" | "NO"))
.unwrap_or(true),
}
}
}