import logging
import smtplib
from email.message import EmailMessage

from app.config import settings

logger = logging.getLogger("larcare")


def _send(subject: str, body: str) -> None:
    if not (settings.smtp_host and settings.notify_email_to):
        logger.info("notify skipped (SMTP not configured): %s", subject)
        return
    msg = EmailMessage()
    msg["Subject"] = subject
    msg["From"] = settings.smtp_user or "no-reply@larcareservices.com"
    msg["To"] = settings.notify_email_to
    msg.set_content(body)
    try:
        with smtplib.SMTP(settings.smtp_host, settings.smtp_port, timeout=10) as smtp:
            smtp.starttls()
            if settings.smtp_user and settings.smtp_password:
                smtp.login(settings.smtp_user, settings.smtp_password)
            smtp.send_message(msg)
    except Exception:
        logger.exception("failed to send notification email: %s", subject)


def send_contact_notification(payload, new_uuid: str) -> None:
    _send(
        f"New contact form submission — {payload.firstName} {payload.lastName}",
        f"UUID: {new_uuid}\n"
        f"Name: {payload.firstName} {payload.lastName}\n"
        f"Email: {payload.email}\n"
        f"Phone: {payload.phone or '-'}\n\n"
        f"{payload.message}",
    )


def send_sms_consent_notification(payload, new_uuid: str) -> None:
    _send(
        f"New SMS consent — {payload.firstName} {payload.lastName}",
        f"UUID: {new_uuid}\nPhone: {payload.phone}\nEmail: {payload.email}",
    )
