import smtplib
import ssl
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
import config


class mail:
    mail_cfg2 = config.MailConfig(**{
        'server': 'mail.psmanaged.com',
        'port': '465',
        'secure': 'ssl',
        'username': 'gc@scharf-automobile.de',
        'password': '+Js10TnD*km4E6',
        'email': 'gc@scharf-automobile.de'
    })

    def __init__(self):
        self.cfg = config.config()
        self.mail_cfg = self.cfg.smtp
        self.reply_to = self.cfg.kunde.replace(' ', '-').lower() + '@global-cube.de'
        self.context = ssl.create_default_context()

    def __enter__(self):
        try:
            self.mailserver = smtplib.SMTP_SSL(self.mail_cfg.server, self.mail_cfg.port, context=self.context)
            self.mailserver.login(self.mail_cfg.username, self.mail_cfg.password)
        except smtplib.SMTPException as e:
            print(e)
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.mailserver.quit()

    def send(self, mailto, subject, html, attachment=None):
        msg = self.message(mailto, subject, html, attachment)

        try:
            result = self.mailserver.sendmail(self.reply_to, mailto, msg.as_string())
            print(result)
        except smtplib.SMTPException as e:
            print(e)

    def message(self, mailto, subject, html, attachment):
        msg = MIMEMultipart('alternative')
        msg['Reply-To'] = self.reply_to
        msg['From'] = f'Global Cube <{self.mail_cfg.email}>'
        msg['To'] = mailto
        msg['Subject'] = subject

        # msg.attach(MIMEText(text, 'plain'))
        msg.attach(MIMEText(html, 'html'))

        for name, filename in attachment or []:
            with open(filename, "rb") as f:
                part = MIMEApplication(f.read(), Name=name)
                part['Content-Disposition'] = f'attachment; filename="{name}"'
                msg.attach(part)
        return msg


if __name__ == '__main__':
    with mail() as m:
        m.send('robert.bedner@gmail.com', 'Test 123', ['C:\\GAPS\\Portal\\daten\\1_1_Taegliche_Erfolgskontrolle_1.pdf'])