import os
import sys
import logging
import click


def exception_handler(exception_type, exception, traceback):
    if bool(os.getenv('DEBUG_UCLOUD')) is True:
        sys.__excepthook__(exception_type, exception, traceback)
    else:
        print("%s: %s" % (exception_type.__name__, exception))


class NoTracebackStreamHandler(logging.StreamHandler):
    def handle(self, record):
        info, cache = record.exc_info, record.exc_text
        record.exc_info, record.exc_text = None, None

        if record.levelname in ["WARNING", "WARN"]:
            click.echo(click.style('', fg='yellow', bold=True, reset=False), nl=False)
        elif record.levelname == "ERROR":
            click.echo(click.style('', fg='red', bold=True, reset=False), nl=False)
        elif record.levelname == "INFO":
            click.echo(click.style('', fg='green', bold=True, reset=False), nl=False)
        elif record.levelname == "CRITICAL":
            click.echo(click.style('', fg='cyan', bold=True, reset=False), nl=False)

        try:
            super().handle(record)
        finally:
            record.exc_info = info
            record.exc_text = cache
            click.echo(click.style('', 'reset'), nl=False)