use reqwest::StatusCode;
use thiserror::Error;
use crate::Errors;
#[derive(Error, Debug)]
pub enum Error {
#[error("HTTP error: {0}")]
Http(#[from] reqwest::Error),
#[error("IO error: {0}")]
IO(#[from] std::io::Error),
#[error("Serialization error: {0}")]
Serde(#[from] serde_json::Error),
#[error("Jira client error ({code}):\n{errors:#?}")]
Fault { code: StatusCode, errors: Errors },
#[error("Could not connect to Jira: Unauthorized")]
Unauthorized,
#[error("Jira request error: MethodNotAllowed")]
MethodNotAllowed,
#[error("Jira request error: NotFound")]
NotFound,
#[error("Could not connect to Jira: {0}")]
ParseError(#[from] url::ParseError),
#[error("Configuration error: {message}")]
ConfigError { message: String },
#[error("Field schema error for '{field}': {message}")]
FieldSchemaError { field: String, message: String },
#[error("Builder validation failed: {message}")]
BuilderError { message: String },
#[error("Invalid query: {message}")]
InvalidQuery { message: String },
#[error("OAuth authentication failed: {message}")]
OAuthError { message: String },
}