from ninja.errors import HttpError

class APIException(HttpError):
    def __init__(self, status_code: int, message: str, code: str = "ERROR"):
        super().__init__(status_code, message)
        self.code = code
        self.message = message

class NotFoundException(APIException):
    def __init__(self, message: str = "Resource not found"):
        super().__init__(status_code=404, message=message, code="NOT_FOUND")

class PermissionDeniedException(APIException):
    def __init__(self, message: str = "Permission denied"):
        super().__init__(status_code=403, message=message, code="PERMISSION_DENIED")

class BadRequestException(APIException):
    def __init__(self, message: str = "Bad request"):
        super().__init__(status_code=400, message=message, code="BAD_REQUEST")

class ConflictException(APIException):
    def __init__(self, message: str = "Resource conflict"):
        super().__init__(status_code=409, message=message, code="CONFLICT")

class UnauthorizedException(APIException):
    def __init__(self, message: str = "Authentication required"):
        super().__init__(status_code=401, message=message, code="UNAUTHORIZED")

class ForbiddenException(APIException):
    def __init__(self, message: str = "Access denied"):
        super().__init__(status_code=403, message=message, code="FORBIDDEN")
