"""Simple email utility using smtplib.
Reads SMTP settings from environment variables.
Falls back gracefully if SMTP is misconfigured.
"""

from __future__ import annotations

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

logger = logging.getLogger(__name__)

SMTP_HOST = os.environ.get("SMTP_HOST", "smtp.gmail.com")
SMTP_PORT = int(os.environ.get("SMTP_PORT", "587"))
SMTP_USER = os.environ.get("SMTP_USER", "grepples15@gmail.com")
SMTP_PASSWORD=os.environ.get("SMTP_PASSWORD", "")
SMTP_USE_TLS = os.environ.get("SMTP_USE_TLS", "true").lower() in ("true", "1", "yes")
DEMO_NOTIFICATION_EMAIL = os.environ.get("DEMO_NOTIFICATION_EMAIL", "grepples15@gmail.com")


def send_demo_notification(
    *,
    name: str,
    email: str,
    company: Optional[str] = None,
    phone: Optional[str] = None,
    message: Optional[str] = None,
) -> bool:
    """Send a demo-request notification email. Returns True on success."""
    if not SMTP_PASSWORD:
        logger.warning("SMTP password not set, skipping notification for %s", email)
        return False
    subject = f"New Demo Request: {name}"
    body_parts = [
        "New demo request submitted:", "",
        f"  Name:    {name}",
        f"  Email:   {email}",
    ]
    if company:
        body_parts.append(f"  Company: {company}")
    if phone:
        body_parts.append(f"  Phone:   {phone}")
    if message:
        body_parts.append(f"  Message: {message}")
    body_parts += ["", "Please follow up within one business day."]
    body = chr(10).join(body_parts)
    msg = MIMEMultipart()
    msg["From"] = SMTP_USER
    msg["To"] = DEMO_NOTIFICATION_EMAIL
    msg["Subject"] = subject
    msg.attach(MIMEText(body, "plain"))
    try:
        if SMTP_USE_TLS:
            server = smtplib.SMTP(SMTP_HOST, SMTP_PORT, timeout=15)
            server.ehlo()
            server.starttls()
            server.ehlo()
        else:
            server = smtplib.SMTP_SSL(SMTP_HOST, SMTP_PORT, timeout=15)
        server.login(SMTP_USER, SMTP_PASSWORD)
        server.sendmail(SMTP_USER, DEMO_NOTIFICATION_EMAIL, msg.as_string())
        server.quit()
        logger.info("Demo notification sent to %s", DEMO_NOTIFICATION_EMAIL)
        return True
    except Exception as exc:
        logger.error("Failed to send demo notification: %s", exc, exc_info=True)
        return False
