#!/usr/bin/env python3
"""SMTP from-address and display-name verification using worker_security/.env."""
from __future__ import annotations

import os
import smtplib
import sys
from email.message import EmailMessage
from email.utils import parseaddr
from pathlib import Path

REPO = Path(__file__).resolve().parents[2]
sys.path.insert(0, str(REPO))
os.environ["SCAN_SHIELD_ENV_FILE"] = str(REPO / "worker_security" / ".env")

from load_env import load_env_files, log_smtp_config, mail_from_header  # noqa: E402

EXPECTED_ADDR = "securityscans@overdrive.co.za"


def main() -> int:
    load_env_files(REPO / "worker_security" / "worker_security.py")
    log_smtp_config()

    host = os.environ.get("SMTP_HOST", "")
    port = int(os.environ.get("SMTP_PORT", "2525") or "2525")
    user = os.environ.get("SMTP_USER", "")
    password = os.environ.get("SMTP_PASSWORD", "")
    mail_from = mail_from_header()
    mail_to = os.environ.get("SCAN_REPORT_EMAIL_TO", "jaco@overdrive.co.za")

    display_name, addr = parseaddr(mail_from)
    if addr != EXPECTED_ADDR:
        print(f"FAIL: address is {addr!r}, expected {EXPECTED_ADDR!r}", file=sys.stderr)
        return 1
    if not display_name:
        print("FAIL: From header has no display name", file=sys.stderr)
        return 1

    msg = EmailMessage()
    msg["Subject"] = "Scan Shield SMTP test - from name verification"
    msg["From"] = mail_from
    msg["To"] = mail_to
    msg.set_content(
        f"Test send from Scan Shield.\nFrom header: {mail_from}\nDisplay name: {display_name}\nAddress: {addr}"
    )

    if port == 465:
        with smtplib.SMTP_SSL(host, port, timeout=60) as smtp:
            if user:
                smtp.login(user, password)
            refused = smtp.send_message(msg)
    else:
        with smtplib.SMTP(host, port, timeout=60) as smtp:
            smtp.ehlo()
            smtp.starttls()
            smtp.ehlo()
            if user:
                smtp.login(user, password)
            refused = smtp.send_message(msg)

    if refused:
        print(f"FAIL: server refused recipients: {refused}", file=sys.stderr)
        return 1

    print(f"SUCCESS: sent From={mail_from!r} To={mail_to} via {host}:{port}")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
