
#from builtins import object
import time
import sys

ERROR   = 1
WARNING = 2
NOTICE  = 4

verbose_type = ERROR+WARNING+NOTICE

def set_verbose_type(val):
    """
    Set the verbose type, e.i.:
      set_verbose_type(ERROR+WARNING) only warning and error will be verbosed
      set_verbose_type(ERROR+WARNING+NOTICE) all verbose
      etc ...

    """
    global verbose_type
    verbose_type = val


try:

    import colorama as col
except:
    str_mtype = {ERROR:"ERROR", WARNING:"WARNING", NOTICE:"NOTICE"}
else:
    str_mtype = {

                 ERROR:col.Fore.RED+"ERROR"+col.Fore.RESET,
                 WARNING:col.Fore.MAGENTA+"WARNING"+col.Fore.RESET,
                 NOTICE:col.Fore.BLUE+"NOTICE"+col.Fore.RESET
                 }

class Log(object):
    """A Log set of function for Gravity """
    _message_format = """[GRAV: {mtype}] {dtype} {date}: {msg}"""
    def log(self, msg, level=1, mtype=WARNING):
        global verbose_type

        if getattr(self,"verbose", 1)<=level and\
           verbose_type & mtype:
            print(self._message_format.format(mtype=str_mtype[mtype],
                                        dtype=getattr(self,"dtype",""),
                                        date=time.strftime("%Y-%m-%dT%H:%M:%S", time.localtime()),
                                        msg =msg
                                       ))
            sys.stdout.flush()                                                                                       


