"""
Registration-related exceptions for the atomic registration architecture
"""

class RegistrationException(Exception):
    """Base class for registration-related exceptions"""
    pass

class RegistrationPaymentFailed(RegistrationException):
    """Exception raised when registration payment fails"""
    def __init__(self, message: str = "Registration payment failed"):
        super().__init__(message)

class RegistrationValidationFailed(RegistrationException):
    """Exception raised when registration validation fails"""
    def __init__(self, message: str = "Registration validation failed", errors: dict = None):
        self.errors = errors or {}
        super().__init__(message)

class UserCreationFailed(RegistrationException):
    """Exception raised when user creation fails"""
    def __init__(self, message: str = "User creation failed"):
        super().__init__(message)

class TenantCreationFailed(RegistrationException):
    """Exception raised when tenant creation fails"""
    def __init__(self, message: str = "Tenant creation failed"):
        super().__init__(message)

class RegistrationFlowInterrupted(RegistrationException):
    """Exception raised when registration flow is interrupted"""
    def __init__(self, message: str = "Registration flow interrupted"):
        super().__init__(message)

class EmailAlreadyRegistered(RegistrationException):
    """Exception raised when email is already registered"""
    def __init__(self, message: str = "Email already registered"):
        super().__init__(message)

class RegistrationStateInvalid(RegistrationException):
    """Exception raised when registration state is invalid"""
    def __init__(self, message: str = "Registration state is invalid"):
        super().__init__(message)


class RegistrationStateError(RegistrationException):
    """Exception raised when registration state operations fail"""
    def __init__(self, message: str = "Registration state error"):
        super().__init__(message)


class InvalidStateTransitionError(RegistrationException):
    """Exception raised when an invalid state transition is attempted"""
    def __init__(self, message: str = "Invalid state transition"):
        super().__init__(message)