import os
import smtplib
from email.message import EmailMessage
from dotenv import load_dotenv
from pathlib import Path


# ==========================================
# LOAD BACKEND .ENV
# ==========================================

BASE_DIR = Path(__file__).resolve().parent

ENV_FILE = BASE_DIR / ".env"

print("EMAIL ENV FILE:", ENV_FILE)

load_dotenv(ENV_FILE)


EMAIL = os.getenv("TASK_EMAIL")
PASSWORD = os.getenv("TASK_EMAIL_APP_PASSWORD")


print("EMAIL:", EMAIL)
print("PASSWORD FOUND:", bool(PASSWORD))


# ==========================================
# SEND EMAIL
# ==========================================

def send_email(to_email, subject, html_content):

    print("========== EMAIL FUNCTION START ==========")
    print("TO:", to_email)
    print("SUBJECT:", subject)

    if not EMAIL:
        raise Exception(
            "TASK_EMAIL is missing from backend/.env"
        )

    if not PASSWORD:
        raise Exception(
            "TASK_EMAIL_APP_PASSWORD is missing from backend/.env"
        )

    if not to_email:
        raise Exception(
            "Recipient email is empty"
        )

    msg = EmailMessage()

    msg["Subject"] = subject
    msg["From"] = EMAIL
    msg["To"] = to_email

    msg.set_content(
        "A new task has been assigned to you. "
        "Please check Kinetic CRM."
    )

    msg.add_alternative(
        html_content,
        subtype="html"
    )

    try:

        print("Connecting Gmail...")

        smtp = smtplib.SMTP(
            "smtp.gmail.com",
            587,
            timeout=30
        )

        smtp.ehlo()

        print("Starting TLS...")

        smtp.starttls()

        smtp.ehlo()

        print("Logging in...")

        smtp.login(
            EMAIL,
            PASSWORD
        )

        print("LOGIN SUCCESS")

        smtp.send_message(msg)

        print("========== EMAIL SENT ==========")

        smtp.quit()

    except Exception as e:

        print("========== EMAIL FAILED ==========")
        print("ERROR TYPE:", type(e).__name__)
        print("ERROR:", str(e))

        raise