import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import random
import string
import asyncio
from datetime import datetime, timedelta

def generate_mfa_code(length=6):
    return ''.join(random.choices(string.digits, k=length))

def send_mfa_email_sync(smtp_host, smtp_port, smtp_user, smtp_pass, to_email, code):
    msg = MIMEMultipart()
    msg['From'] = smtp_user
    msg['To'] = to_email
    msg['Subject'] = 'Código de Verificación MFA - GanttScrum'

    body = f"Tu código de verificación es: {code}\nEste código expirará en 5 minutos."
    msg.attach(MIMEText(body, 'plain'))

    try:
        server = smtplib.SMTP(smtp_host, int(smtp_port))
        server.starttls()
        server.login(smtp_user, smtp_pass)
        server.send_message(msg)
        server.quit()
        return True
    except Exception as e:
        print(f"Error sending MFA email: {e}")
        return False

async def send_mfa_email(smtp_host, smtp_port, smtp_user, smtp_pass, to_email, code):
    return await asyncio.to_thread(send_mfa_email_sync, smtp_host, smtp_port, smtp_user, smtp_pass, to_email, code)

def send_generic_email_sync(smtp_host, smtp_port, smtp_user, smtp_pass, to_email, subject, body):
    msg = MIMEMultipart()
    msg['From'] = smtp_user
    msg['To'] = to_email
    msg['Subject'] = subject

    msg.attach(MIMEText(body, 'plain'))

    try:
        server = smtplib.SMTP(smtp_host, int(smtp_port))
        server.starttls()
        server.login(smtp_user, smtp_pass)
        server.send_message(msg)
        server.quit()
        return True
    except Exception as e:
        print(f"Error sending generic email: {e}")
        return False

async def send_generic_email(smtp_host, smtp_port, smtp_user, smtp_pass, to_email, subject, body):
    return await asyncio.to_thread(send_generic_email_sync, smtp_host, smtp_port, smtp_user, smtp_pass, to_email, subject, body)
