from message import Message

class InputParser:
    def __init__(self):
        self._messages = {}
        self._decoded = []

    def feed_line(self, line):
        try:
            msg_id, msg_fragment = line.rstrip("\n").split(' ', 1)
        except:
            raise Exception("Invalid fragment!")

        try:
            if msg_id in self._messages:
                self._messages[msg_id].feed_fragment(msg_fragment)
            else:
                self._messages[msg_id] = Message(msg_fragment)

            if self._messages[msg_id].is_complete():
                self._decoded.append( self._messages[msg_id].get_content() )
                del self._messages[msg_id]

        except Exception as e:
            if msg_id in self._messages:
                del self._messages[msg_id]
            raise e

    def fetch_decoded(self):
        decoded = self._decoded
        self._decoded = []
        return decoded
