from selfprivacy_api.utils.strings import PLEASE_UPDATE_APP_TEXT


class UserNotFound(Exception):
    """User not found"""

    @staticmethod
    def get_error_message() -> str:
        return "User not found"


class UserIsProtected(Exception):
    """User is protected and cannot be deleted or modified"""

    @staticmethod
    def get_error_message() -> str:
        return "User is protected and cannot be deleted or modified"


class UsernameForbidden(Exception):
    """Username is forbidden"""

    @staticmethod
    def get_error_message() -> str:
        return "Username is forbidden"


class UserAlreadyExists(Exception):
    """User already exists"""

    @staticmethod
    def get_error_message() -> str:
        return "User already exists"


class UsernameNotAlphanumeric(Exception):
    """Username must be alphanumeric and start with a letter"""

    @staticmethod
    def get_error_message() -> str:
        return "Username must be alphanumeric and start with a letter"


class UsernameTooLong(Exception):
    """Username is too long. Must be less than 32 characters"""

    @staticmethod
    def get_error_message() -> str:
        return "Username is too long. Must be less than 32 characters"


class PasswordIsEmpty(Exception):
    """Password cannot be empty"""

    @staticmethod
    def get_error_message() -> str:
        return "Password cannot be empty"


class InvalidConfiguration(Exception):
    """Invalid configuration, userdata is broken"""

    @staticmethod
    def get_error_message() -> str:
        return "Invalid configuration, userdata is broken"


class SelfPrivacyAppIsOutdate(Exception):
    """
    SelfPrivacy app is out of date, please update. Some important functions are not working at the moment.
    """

    @staticmethod
    def get_error_message() -> str:
        return PLEASE_UPDATE_APP_TEXT


class NoPasswordResetLinkFoundInResponse(Exception):
    """No password reset link was found in the Kanidm response."""

    @staticmethod
    def get_error_message() -> str:
        return "The Kanidm response does not contain a password reset link."


class DisplaynameTooLong(Exception):
    """Display name is too long. Must be less than 16 characters"""

    @staticmethod
    def get_error_message() -> str:
        return "Display name is too long. Must be less than 16 characters"