from . import UnauthorizedError


class ActiveUserRequiredError(UnauthorizedError):
    def __init__(self, **kwargs):
        super(Exception, self).__init__(
            self,
            'The method is only available to already activated users.'
        )


class AuthKeyInvalidError(UnauthorizedError):
    def __init__(self, **kwargs):
        super(Exception, self).__init__(
            self,
            'The key is invalid.'
        )


class AuthKeyPermEmptyError(UnauthorizedError):
    def __init__(self, **kwargs):
        super(Exception, self).__init__(
            self,
            'The method is unavailable for temporary authorization key, not '
            'bound to permanent.'
        )


class AuthKeyUnregisteredError(UnauthorizedError):
    def __init__(self, **kwargs):
        super(Exception, self).__init__(
            self,
            'The key is not registered in the system.'
        )


class InviteHashExpiredError(UnauthorizedError):
    def __init__(self, **kwargs):
        super(Exception, self).__init__(
            self,
            'The chat the user tried to join has expired and is not valid '
            'anymore.'
        )


class SessionExpiredError(UnauthorizedError):
    def __init__(self, **kwargs):
        super(Exception, self).__init__(
            self,
            'The authorization has expired.'
        )


class SessionPasswordNeededError(UnauthorizedError):
    def __init__(self, **kwargs):
        super(Exception, self).__init__(
            self,
            'Two-steps verification is enabled and a password is required.'
        )


class SessionRevokedError(UnauthorizedError):
    def __init__(self, **kwargs):
        super(Exception, self).__init__(
            self,
            'The authorization has been invalidated, because of the user '
            'terminating all sessions.'
        )


class UserAlreadyParticipantError(UnauthorizedError):
    def __init__(self, **kwargs):
        super(Exception, self).__init__(
            self,
            'The authenticated user is already a participant of the chat.'
        )


class UserDeactivatedError(UnauthorizedError):
    def __init__(self, **kwargs):
        super(Exception, self).__init__(
            self,
            'The user has been deleted/deactivated.'
        )


rpc_errors_401_all = {
    'ACTIVE_USER_REQUIRED': ActiveUserRequiredError,
    'AUTH_KEY_INVALID': AuthKeyInvalidError,
    'AUTH_KEY_PERM_EMPTY': AuthKeyPermEmptyError,
    'AUTH_KEY_UNREGISTERED': AuthKeyUnregisteredError,
    'INVITE_HASH_EXPIRED': InviteHashExpiredError,
    'SESSION_EXPIRED': SessionExpiredError,
    'SESSION_PASSWORD_NEEDED': SessionPasswordNeededError,
    'SESSION_REVOKED': SessionRevokedError,
    'USER_ALREADY_PARTICIPANT': UserAlreadyParticipantError,
    'USER_DEACTIVATED': UserDeactivatedError,
}
