const QUIET_MARGIN_S: u64 = 60;
const LONG_NAP_S: u64 = 20 * 60;
pub fn run(seconds: u64, reason: Option<&str>) -> netsky_core::Result<()> {
if seconds == 0 {
netsky_core::bail!("seconds must be > 0");
}
let reason = reason.unwrap_or("planned nap");
if seconds >= LONG_NAP_S {
let quiet_seconds = seconds.saturating_add(QUIET_MARGIN_S);
crate::cmd::quiet::run(quiet_seconds, Some(reason))?;
println!(
"nap prepared: quiet sentinel covers {quiet_seconds}s ({seconds}s + {QUIET_MARGIN_S}s margin)"
);
} else {
println!("nap prepared: {seconds}s is below {LONG_NAP_S}s; quiet sentinel not needed");
}
println!("next: ScheduleWakeup(delaySeconds={seconds}, reason=\"{reason}\")");
Ok(())
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn rejects_zero() {
assert!(run(0, None).is_err());
}
}