import logging
from django.core.mail import EmailMessage
from django.core.mail.backends.base import BaseEmailBackend
from django.conf import settings
import os
import datetime

# Configure logger
logger = logging.getLogger('registration.emails')

def log_email_attempt(subject, recipient_list, success=True, error=None):
    """
    Log email sending attempts to help debug production issues
    """
    timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    status = "SUCCESS" if success else f"FAILED: {error}"
    
    log_message = f"{timestamp} | Email to: {', '.join(recipient_list)} | Subject: {subject} | Status: {status}"
    
    # Log to the Django logger
    if success:
        logger.info(log_message)
    else:
        logger.error(log_message)
    
    # Also write to a dedicated email log file for easy monitoring in production
    log_dir = os.path.join(settings.BASE_DIR, 'logs')
    os.makedirs(log_dir, exist_ok=True)
    
    with open(os.path.join(log_dir, 'email.log'), 'a') as f:
        f.write(log_message + '\n')

# Monkey patch EmailMessage to track sends
original_send = EmailMessage.send

def send_with_logging(self, *args, **kwargs):
    """
    Wrapper for EmailMessage.send that logs all attempts
    """
    try:
        result = original_send(self, *args, **kwargs)
        log_email_attempt(self.subject, self.to, success=True)
        return result
    except Exception as e:
        log_email_attempt(self.subject, self.to, success=False, error=str(e))
        raise

# Apply the monkey patch
EmailMessage.send = send_with_logging
