from utils import Command, Notification, WIPObject
from Runtime import RemoteObject
from Network import RequestId


### Console.clearMessages
def clearMessages():
    command = Command('Console.clearMessages')
    return command


### Console.disable
def disable():
    command = Command('Console.disable')
    return command


### Console.enable
def enable():
    command = Command('Console.enable')
    return command


### Console.messageAdded
def messageAdded():
    notification = Notification('Console.messageAdded')
    return notification


def messageAdded_parser(params):
    result = ConsoleMessage(params['message'])
    return result


### Console.messageRepeatCountUpdated
def messageRepeatCountUpdated():
    notification = Notification('Console.messageRepeatCountUpdated')
    return notification


def messageRepeatCountUpdate_parser(params):
    return params['count']


### Console.messagesCleared
def messagesCleared():
    notification = Notification('Console.messagesCleared')
    return notification


class CallFrame(WIPObject):
    def __init__(self, value):
        self.set(value, 'columnNumber')
        self.set(value, 'functionName')
        self.set(value, 'lineNumber')
        self.set(value, 'url')


class ConsoleMessage(WIPObject):
    def __init__(self, value):
        self.set(value, 'level')
        self.set(value, 'line')
        self.set_class(value, 'networkRequestId', RequestId)
        self.parameters = []
        if 'parameters' in value:
            for param in value['parameters']:
                self.parameters.append(RemoteObject(param))
        self.set(value, 'repeatCount', 1)
        self.set_class(value, 'stackTrace', StackTrace)
        self.set(value, 'text')
        self.set(value, 'url')


class StackTrace(list):
    def __init__(self, value):
        for callFrame in value:
            self.append(CallFrame(callFrame))
