from sys import exit as system_exit


class LogHandler:
    def __new__(cls, *args, **kwargs):
        return super().__new__(cls)

    def __init__(self, args):
        self.args = args

    def exception(self, exception_type, exception, stack_trace=None):
        exception_dict = {
            "EnvironmentError": f'Environment variable "{exception}" is not set.',
            "SSLError": f'SSL verification failed. IGNORE_SSL_ERRORS is {exception}. Set IGNORE_SSL_ERRORS to True if you want to ignore this error. EXITING.',
            "GitCommandError": f'The repo "{exception}" is not a valid git repo.',
            "GitInvalidRepositoryError": f'The repo "{exception}" is not a valid git repo.',
            "Exception": f'An unknown error occurred: "{exception}"'
        }

        if self.args.verbose and stack_trace:
            print(stack_trace)
        print(exception_dict[exception_type])
        system_exit(1)

    def verbose_log(self, message):
        if self.args.verbose:
            print(message)

    def log(self, message):
        print(message)

    def log_device_ports_created(self, created_ports: list = [], port_type: str = "port"):
        for port in created_ports:
            self.verbose_log(f'{port_type} Template Created: {port.name} - '
                             + f'{port.type if hasattr(port, "type") else ""} - {port.device_type.id} - '
                             + f'{port.id}')
        return len(created_ports)

    def log_module_ports_created(self, created_ports: list = [], port_type: str = "port"):
        for port in created_ports:
            self.verbose_log(f'{port_type} Template Created: {port.name} - '
                             + f'{port.type if hasattr(port, "type") else ""} - {port.module_type.id} - '
                             + f'{port.id}')
        return len(created_ports)