import aiosmtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from jinja2 import Environment, FileSystemLoader
import os
from app.core.config import settings


class EmailService:
    def __init__(self):
        self.smtp_host = settings.mail_host
        self.smtp_port = settings.mail_port
        self.smtp_user = settings.mail_username
        self.smtp_password = settings.mail_password
        self.from_email = settings.mail_from
        self.from_name = settings.mail_from_name

        # Set up Jinja2 environment for templates
        template_dir = os.path.join(os.path.dirname(__file__), '..', 'templates')
        self.jinja_env = Environment(loader=FileSystemLoader(template_dir))

    async def send_email(self, to_email: str, subject: str, template_name: str, template_vars: dict):
        # Render the template
        template = self.jinja_env.get_template(template_name)
        html_content = template.render(**template_vars)

        # Create message
        msg = MIMEMultipart('alternative')
        msg['Subject'] = subject
        msg['From'] = f"{self.from_name} <{self.from_email}>"
        msg['To'] = to_email

        # Attach HTML content
        html_part = MIMEText(html_content, 'html')
        msg.attach(html_part)

        # Send email
        try:
            async with aiosmtplib.SMTP(hostname=self.smtp_host, port=self.smtp_port, use_tls=True) as smtp:
                await smtp.login(self.smtp_user, self.smtp_password)
                await smtp.send_message(msg)
        except Exception as e:
            # Log error, but for now, print
            print(f"Failed to send email: {e}")
            # In production, use logging


email_service = EmailService()