"""
SMTP Sender — sends real emails via SMTP (e.g., to Mailpit for dev).

Uses standard smtplib. Configuration via environment variables:
  SMTP_HOST (default: localhost)
  SMTP_PORT (default: 1025)
  SMTP_FROM_NAME (default: BreakPilot Compliance)
  SMTP_FROM_ADDR (default: compliance@breakpilot.local)
"""

import logging
import os
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

logger = logging.getLogger(__name__)

SMTP_HOST = os.environ.get("SMTP_HOST", "localhost")
SMTP_PORT = int(os.environ.get("SMTP_PORT", "1025"))
SMTP_FROM_NAME = os.environ.get("SMTP_FROM_NAME", "BreakPilot Compliance")
SMTP_FROM_ADDR = os.environ.get("SMTP_FROM_ADDR", "compliance@breakpilot.local")


def send_email(
    recipient: str,
    subject: str,
    body_html: str,
    from_addr: str | None = None,
    from_name: str | None = None,
) -> dict:
    """Send an email via SMTP. Returns dict with status and message_id."""
    sender_addr = from_addr or SMTP_FROM_ADDR
    sender_name = from_name or SMTP_FROM_NAME

    msg = MIMEMultipart("alternative")
    msg["From"] = f"{sender_name} <{sender_addr}>"
    msg["To"] = recipient
    msg["Subject"] = subject
    msg.attach(MIMEText(body_html, "html", "utf-8"))

    try:
        with smtplib.SMTP(SMTP_HOST, SMTP_PORT, timeout=10) as server:
            server.sendmail(sender_addr, [recipient], msg.as_string())
        logger.info("Email sent to %s: %s", recipient, subject)
        return {"status": "sent", "recipient": recipient, "subject": subject}
    except Exception as e:
        logger.error("Failed to send email to %s: %s", recipient, e)
        return {"status": "failed", "recipient": recipient, "error": str(e)}
