use thiserror::Error;
pub type TelegramResult<T> = std::result::Result<T, TelegramError>;
#[derive(Debug, Error)]
pub enum TelegramError {
#[error(
"telegram bot token not found: set RALPH_TELEGRAM_BOT_TOKEN or configure human.telegram.bot_token"
)]
MissingBotToken,
#[error("failed to start telegram bot: {0}")]
Startup(String),
#[error("failed to send telegram message after {attempts} attempts: {reason}")]
Send { attempts: u32, reason: String },
#[error("failed to receive telegram messages: {0}")]
Receive(String),
#[error("timed out waiting for human response after {timeout_secs}s")]
ResponseTimeout { timeout_secs: u64 },
#[error("state persistence error: {0}")]
State(#[from] std::io::Error),
#[error("state parse error: {0}")]
StateParse(#[from] serde_json::Error),
#[error("event write error: {0}")]
EventWrite(String),
}