import logging
import warnings


class LgndrException(RuntimeError):
    def __init__(self, message="Error in Legendary"):
        self.message = message
        super(LgndrException, self).__init__(self.message)


class LgndrWarning(RuntimeWarning):
    def __init__(self, message="Warning in Legendary"):
        self.message = message
        super(LgndrWarning, self).__init__(self.message)


class LgndrCLILogHandler(logging.Handler):
    def emit(self, record: logging.LogRecord) -> None:
        # lk: FATAL is the same as CRITICAL
        if record.levelno == logging.ERROR or record.levelno == logging.CRITICAL:
            raise LgndrException(record.getMessage())
        # if record.levelno < logging.ERROR or record.levelno == logging.WARNING:
        #     warnings.warn(record.getMessage())


class LgndrCoreLogHandler(logging.Handler):
    def emit(self, record: logging.LogRecord) -> None:
        # lk: FATAL is the same as CRITICAL
        if record.levelno == logging.CRITICAL:
            raise LgndrException(record.getMessage())
        # if record.levelno < logging.CRITICAL:
        #     warnings.warn(record.getMessage())
