"""
src/messagetypes/message.py
===========================
"""
from debug import logger
from messagetypes import MsgBase


class Message(MsgBase):
    """Encapsulate a message"""
    # pylint: disable=attribute-defined-outside-init

    def decode(self, data):
        """Decode a message"""
        # UTF-8 and variable type validator
        if isinstance(data["subject"], str):
            self.subject = unicode(data["subject"], 'utf-8', 'replace')
        else:
            self.subject = unicode(str(data["subject"]), 'utf-8', 'replace')
        if isinstance(data["body"], str):
            self.body = unicode(data["body"], 'utf-8', 'replace')
        else:
            self.body = unicode(str(data["body"]), 'utf-8', 'replace')

    def encode(self, data):
        """Encode a message"""
        super(Message, self).__init__()
        try:
            self.data["subject"] = data["subject"]
            self.data["body"] = data["body"]
        except KeyError as e:
            logger.error("Missing key %s", e)
        return self.data

    def process(self):
        """Process a message"""
        logger.debug("Subject: %i bytes", len(self.subject))
        logger.debug("Body: %i bytes", len(self.body))
