import json

from platypush.message import Message

class Request(Message):
    """ Request message class """

    def __init__(self, target, action, origin=None, args={}):
        """
        Params:
            target -- Target node [String]
            action -- Action to be executed (e.g. music.mpd.play) [String]
            origin -- Origin node [String]
              args -- Additional arguments for the action [Dict]
        """

        self.target = target
        self.action = action
        self.origin = origin
        self.args   = args

    @classmethod
    def build(cls, msg):
        msg = super().parse(msg)
        args = {
            'target' : msg['target'],
            'action' : msg['action'],
            'args'   : msg['args'],
        }

        if 'origin' in msg: args['origin'] = msg['origin']
        return Request(**args)

    def __str__(self):
        """
        Overrides the str() operator and converts
        the message into a UTF-8 JSON string
        """

        return json.dumps({
            'type'   : 'request',
            'target' : self.target,
            'action' : self.action,
            'args'   : self.args,
            'origin' : self.origin if hasattr(self, 'origin') else None,
        })


# vim:sw=4:ts=4:et: