use std::path::Path;
use std::sync::Arc;
use std::sync::atomic::AtomicBool;
use std::time::Duration;
#[derive(Debug, Default)]
pub struct CheckinContext {
pub current_hat: Option<String>,
pub open_tasks: usize,
pub closed_tasks: usize,
pub cumulative_cost: f64,
}
pub trait RobotService: Send + Sync {
fn send_question(&self, payload: &str) -> anyhow::Result<i32>;
fn wait_for_response(&self, events_path: &Path) -> anyhow::Result<Option<String>>;
fn send_checkin(
&self,
iteration: u32,
elapsed: Duration,
context: Option<&CheckinContext>,
) -> anyhow::Result<i32>;
fn timeout_secs(&self) -> u64;
fn shutdown_flag(&self) -> Arc<AtomicBool>;
fn stop(self: Box<Self>);
}