from pyzmail import PyzMessage, decode_text


class Email(object):
    def __init__(self, raw_mail_lines):
        msg = PyzMessage.factory(raw_mail_lines)

        self.subject = msg.get_subject()
        self.sender = msg.get_address("from")
        self.date = msg.get_decoded_header("date", "")
        self.id = msg.get_decoded_header("message-id", "")

        for mailpart in msg.mailparts:
            if mailpart.is_body == "text/plain":
                payload, used_charset = decode_text(
                    mailpart.get_payload(), mailpart.charset, None
                )
                self.charset = used_charset
                self.text = payload
                return
            else:
                self.text = None

    def __repr__(self):
        mail_str = "Subject: %s\n" % self.subject
        mail_str += "From: %s %s\n" % self.sender
        mail_str += "Date: %s\n" % self.date
        mail_str += "ID: %s\n" % self.id
        if self.text:
            mail_str += "Text: %s\n" % self.text
        return mail_str