import re

class ClientEvent(object):
    """ a representation of a client event
    """
    UNKNOWN = -1
    KEYDOWN = 0
    KEYUP = 1
    MOUSEDOWN = 3
    MOUSEUP = 4
    _types = {
        'KD': KEYDOWN,
        'KU': KEYUP,
        'MD': MOUSEDOWN,
        'MU': MOUSEUP,
    }

    _reg_valid_msg = re.compile(r'^([A-Z]{2})(.*)$')
    def __init__(self, msg):
        match = self._reg_valid_msg.match(msg)
        if not match:
            raise ValueError('missing command in %r' % (msg,))
        command = match.group(1)
        value = match.group(2)
        self.raw = msg
        self.command = command
        self.type = self._types.get(command, self.UNKNOWN)
        self.value = value
        if command in ('MD', 'MU'):
            self.value = int(value)


