from typing import Optional
from moto.core.exceptions import JsonRESTError


class IllegalStatusException(JsonRESTError):
    code = 400

    def __init__(self, message: str):
        super().__init__("IllegalStatusException", message)


class InvalidEventPatternException(JsonRESTError):
    code = 400

    def __init__(self, reason: Optional[str] = None):
        msg = "Event pattern is not valid. "
        if reason:
            msg += f"Reason: {reason}"

        super().__init__("InvalidEventPatternException", msg)


class ResourceNotFoundException(JsonRESTError):
    code = 400

    def __init__(self, message: str):
        super().__init__("ResourceNotFoundException", message)


class ResourceAlreadyExistsException(JsonRESTError):
    code = 400

    def __init__(self, message: str):
        super().__init__("ResourceAlreadyExistsException", message)


class ValidationException(JsonRESTError):
    code = 400

    def __init__(self, message: str):
        super().__init__("ValidationException", message)
