#!/usr/bin/env python3
"""Morning briefing generator + Gmail SMTP sender.

Copy to ~/.hermes/scripts/send_briefing_email.py and wire a cron job to run it.

Reads from env vars (add to ~/.hermes/.env):
  GMAIL_USER="your@gmail.com"
  GMAIL_APP_PASSWORD="xxxx-xxxx-xxxx-xxxx"
  RECIPIENT="sage.stockmans@pm.me"   (optional, falls back to hardcoded default)

Requires: a companion briefing generator script that prints the message to stdout.
"""

import os
import sys
import subprocess
import smtplib
import datetime
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

GMAIL_USER = os.environ.get("GMAIL_USER", "").strip()
GMAIL_APP_PASSWORD = os.environ.get("GMAIL_APP_PASSWORD", "").strip()
RECIPIENT = os.environ.get("RECIPIENT", "sage.stockmans@pm.me").strip()

SMTP_HOST = "smtp.gmail.com"
SMTP_PORT = 587
BRIEFING_SCRIPT = os.environ.get("BRIEFING_SCRIPT", "/home/thesage/.hermes/scripts/morning_briefing.py")


def generate_briefing():
    result = subprocess.run(
        [sys.executable, BRIEFING_SCRIPT],
        capture_output=True,
        text=True,
    )
    if result.returncode != 0:
        print(f"Briefing generation failed:\n{result.stderr}", file=sys.stderr)
        sys.exit(1)
    return result.stdout


def send_email(subject, body, to_addr):
    msg = MIMEMultipart()
    msg["From"] = GMAIL_USER
    msg["To"] = to_addr
    msg["Subject"] = subject
    msg.attach(MIMEText(body, "plain", "utf-8"))

    with smtplib.SMTP(SMTP_HOST, SMTP_PORT) as server:
        server.starttls()
        server.login(GMAIL_USER, GMAIL_APP_PASSWORD)
        server.sendmail(GMAIL_USER, to_addr, msg.as_string())


def main():
    if not GMAIL_USER or not GMAIL_APP_PASSWORD:
        print("Error: GMAIL_USER and GMAIL_APP_PASSWORD env vars must be set.", file=sys.stderr)
        sys.exit(1)

    body = generate_briefing()
    today_str = datetime.date.today().strftime("%A, %B %d")
    subject = f"Morning Briefing - {today_str}"

    send_email(subject, body, RECIPIENT)
    print(f"Sent morning briefing to {RECIPIENT}")


if __name__ == "__main__":
    main()
