# -*- coding: utf-8 -*-
"""
email_sender.py - Versand des fertigen Band-PDFs per E-Mail.

Wird von worker.py aufgerufen:
    email_sender.send_band_pdf(email, name, titel, pdf_path)

Liest den SMTP-Zugang aus Umgebungsvariablen (kommen aus der .env):
    SMTP_HOST   z.B. mail.fine-senses.de
    SMTP_PORT   587 (STARTTLS) oder 465 (SSL)
    SMTP_USER   info@fine-senses.de
    SMTP_PASS   Postfach-Passwort
    MAIL_FROM   "Human Design Analyse <info@fine-senses.de>"
    MAIL_BCC    Pruef-Kopie an Dirk (optional)
"""

import os
import smtplib
import ssl
from email.message import EmailMessage


def _env(name, default=None, required=False):
    """Liest eine Umgebungsvariable, optional mit Pflichtpruefung."""
    val = os.environ.get(name, default)
    if required and (val is None or str(val).strip() == ""):
        raise RuntimeError(f"Umgebungsvariable {name} fehlt oder ist leer")
    return val


def send_band_pdf(email, name, titel, pdf_path):
    """
    Verschickt das Band-PDF an den Kunden.

    email     : Empfaenger-Adresse (Kunde)
    name      : Name des Kunden (fuer die Anrede)
    titel     : Band-Titel, z.B. "Band I - Grundprofil"
    pdf_path  : voller Pfad zur fertigen PDF-Datei
    """
    smtp_host = _env("SMTP_HOST", required=True)
    smtp_port = int(_env("SMTP_PORT", "587"))
    smtp_user = _env("SMTP_USER", required=True)
    smtp_pass = _env("SMTP_PASS", required=True)
    mail_from = _env("MAIL_FROM", smtp_user)
    mail_bcc = _env("MAIL_BCC", "")

    # Vorname fuer eine persoenliche Anrede herausziehen
    vorname = (name or "").strip().split(" ")[0] if name else ""
    anrede = f"Hallo {vorname}," if vorname else "Hallo,"

    # --- Nachricht aufbauen ---
    msg = EmailMessage()
    msg["Subject"] = f"Deine Human Design Analyse - {titel}"
    msg["From"] = mail_from
    msg["To"] = email
    bcc_list = []
    if mail_bcc and mail_bcc.strip():
        msg["Bcc"] = mail_bcc.strip()
        bcc_list = [mail_bcc.strip()]

    body = (
        f"{anrede}\n\n"
        f"vielen Dank fuer deine Bestellung. Im Anhang findest du deine "
        f"persoenliche Auswertung \"{titel}\" als PDF.\n\n"
        f"Nimm dir in Ruhe Zeit zum Lesen - die Analyse ist ganz auf dich "
        f"abgestimmt.\n\n"
        f"Herzliche Gruesse\n"
        f"Fine Senses\n"
    )
    msg.set_content(body)

    # --- PDF anhaengen ---
    if not os.path.exists(pdf_path):
        raise FileNotFoundError(f"PDF nicht gefunden: {pdf_path}")
    with open(pdf_path, "rb") as f:
        pdf_data = f.read()
    dateiname = os.path.basename(pdf_path)
    msg.add_attachment(
        pdf_data,
        maintype="application",
        subtype="pdf",
        filename=dateiname,
    )

    # Alle Empfaenger (To + Bcc) fuer den eigentlichen Versand
    empfaenger = [email] + bcc_list

    # --- Versenden: Port 465 = SSL, sonst STARTTLS ---
    context = ssl.create_default_context()
    if smtp_port == 465:
        with smtplib.SMTP_SSL(smtp_host, smtp_port, context=context, timeout=30) as server:
            server.login(smtp_user, smtp_pass)
            server.send_message(msg, from_addr=mail_from, to_addrs=empfaenger)
    else:
        with smtplib.SMTP(smtp_host, smtp_port, timeout=30) as server:
            server.ehlo()
            server.starttls(context=context)
            server.ehlo()
            server.login(smtp_user, smtp_pass)
            server.send_message(msg, from_addr=mail_from, to_addrs=empfaenger)

    return True
