use thiserror::Error;
#[derive(Debug, Error)]
pub enum AuthError {
#[error("Invalid credentials provided.")]
InvalidCredentials,
#[error("User not found.")]
UserNotFound,
#[error("User already exists.")]
UserAlreadyExists,
#[error("Password hashing failed: {0}")]
HashingError(String),
#[error("Password verification failed: {0}")]
PasswordVerificationError(String),
#[error("Configuration error: {0}")]
ConfigError(String),
#[error("Service unavailable: {0}")]
ServiceUnavailable(String),
#[error("Feature not implemented yet: {0}")]
NotImplemented(String),
#[error("Invalid input data: {0}")]
InvalidInput(String),
#[error("Invalid password: {0}")]
InvalidPassword(String),
#[error("Verification error: {0}")]
VerificationError(String),
#[error("Token expired")]
TokenExpired,
#[error("Token generation failed: {0}")]
TokenGeneration(String),
#[error("Token validation failed: {0}")]
TokenValidation(String),
#[error("InvalidToken: {0}")]
InvalidToken(String),
#[error("Missing password manager")]
MissingPasswordManager,
#[error("Missing persistent user manager")]
MissingPersistentUserManager,
#[error("Missing token manager")]
MissingTokenManager,
#[error("OAuth network error: {0}")]
OAuthNetwork(String),
#[error("OAuth invalid response: {0}")]
OAuthInvalidResponse(String),
#[error("OAuth provider error: {0}")]
OAuthProvider(String),
#[error("OAuth token exchange failed: {0}")]
OAuthTokenExchange(String),
#[error("OAuth user info fetch failed: {0}")]
OAuthUserInfo(String),
#[error("OAuth other error: {0}")]
OAuthOther(String),
#[error("User signup error: {0}")]
SignupError(String),
#[error("User login error: {0}")]
LoginError(String),
#[cfg(feature = "postgres")]
#[error("Database error: {0}")]
DatabaseError(String),
}