use thiserror::Error;
#[derive(Error, Debug)]
pub enum KlafsError {
#[error("Authentication failed: {message}")]
AuthenticationFailed { message: String },
#[error("Account locked: Klafs locks accounts after 3 failed login attempts. Please wait or contact support.")]
AccountLocked,
#[error("Session expired or invalid. Please login again.")]
SessionExpired,
#[error("Invalid PIN provided")]
InvalidPin,
#[error("Sauna with ID {sauna_id} not found")]
SaunaNotFound { sauna_id: String },
#[error("Sauna is not connected. Check your sauna's network connection.")]
SaunaNotConnected,
#[error("Invalid parameter: {message}")]
InvalidParameter { message: String },
#[error("API error: {status_code} - {message}")]
ApiError { status_code: u16, message: String },
#[error("Network error: {0}")]
Network(#[from] reqwest::Error),
#[error("Failed to parse response: {0}")]
Parse(#[from] serde_json::Error),
#[error("Failed to extract verification token from response")]
VerificationTokenNotFound,
#[error("Unexpected response: {message}")]
UnexpectedResponse { message: String },
}
pub type Result<T> = std::result::Result<T, KlafsError>;