# src/utils/email_service.py
"""
이메일 발송 유틸리티
"""
import os
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
import logging

logger = logging.getLogger(__name__)

def send_email(to_email, subject, body_html=None, body_text=None):
    """
    이메일 발송
    
    Args:
        to_email: 수신자 이메일
        subject: 제목
        body_html: HTML 본문 (선택)
        body_text: 텍스트 본문 (선택)
    
    Returns:
        bool: 발송 성공 여부
    """
    try:
        smtp_server = os.getenv('SMTP_SERVER', 'smtp.gmail.com')
        smtp_port = int(os.getenv('SMTP_PORT', '587'))
        smtp_username = os.getenv('SMTP_USERNAME')
        smtp_password = os.getenv('SMTP_PASSWORD')
        
        if not all([smtp_username, smtp_password]):
            logger.warning("SMTP 설정이 완료되지 않았습니다. 환경변수를 확인해주세요.")
            return False
        
        # 이메일 메시지 생성
        msg = MIMEMultipart('alternative')
        msg['From'] = smtp_username
        msg['To'] = to_email
        msg['Subject'] = Header(subject, 'utf-8')
        
        # 본문 추가
        if body_html:
            html_part = MIMEText(body_html, 'html', 'utf-8')
            msg.attach(html_part)
        
        if body_text:
            text_part = MIMEText(body_text, 'plain', 'utf-8')
            msg.attach(text_part)
        
        # 이메일 전송
        server = smtplib.SMTP(smtp_server, smtp_port)
        server.starttls()
        server.login(smtp_username, smtp_password)
        server.send_message(msg)
        server.quit()
        
        logger.info(f"이메일 전송 완료: {to_email}, 제목: {subject}")
        return True
        
    except Exception as e:
        logger.error(f"이메일 전송 실패: {to_email}, 오류: {str(e)}")
        return False

def send_payment_link_email(user_email, user_name, subscription_name, payment_link, billing_date, amount):
    """
    결제 링크 이메일 발송
    
    Args:
        user_email: 사용자 이메일
        user_name: 사용자 이름
        subscription_name: 구독 상품명
        payment_link: 결제 링크 URL
        billing_date: 결제 예정일
        amount: 결제 금액
    """
    subject = f"[M-Link] {subscription_name} 구독 갱신 결제 안내"
    
    body_html = f"""
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <style>
            body {{ font-family: Arial, sans-serif; line-height: 1.6; color: #333; }}
            .container {{ max-width: 600px; margin: 0 auto; padding: 20px; }}
            .header {{ background-color: #4CAF50; color: white; padding: 20px; text-align: center; }}
            .content {{ padding: 20px; background-color: #f9f9f9; }}
            .button {{ display: inline-block; padding: 12px 30px; background-color: #4CAF50; color: white; text-decoration: none; border-radius: 5px; margin: 20px 0; }}
            .footer {{ padding: 20px; text-align: center; color: #666; font-size: 12px; }}
        </style>
    </head>
    <body>
        <div class="container">
            <div class="header">
                <h1>M-Link 구독 갱신 결제 안내</h1>
            </div>
            <div class="content">
                <p>안녕하세요, {user_name}님</p>
                <p>M-Link {subscription_name} 구독 갱신 결제가 예정되어 있습니다.</p>
                <p><strong>결제 예정일:</strong> {billing_date}</p>
                <p><strong>결제 금액:</strong> {amount:,}원</p>
                <p>아래 버튼을 클릭하여 결제를 완료해주세요.</p>
                <div style="text-align: center;">
                    <a href="{payment_link}" class="button">결제하기</a>
                </div>
                <p style="margin-top: 30px; font-size: 12px; color: #666;">
                    결제 링크가 만료되거나 문제가 있는 경우, M-Link 고객센터로 문의해주세요.
                </p>
            </div>
            <div class="footer">
                <p>© 2024 M-Link. All rights reserved.</p>
            </div>
        </div>
    </body>
    </html>
    """
    
    body_text = f"""
안녕하세요, {user_name}님

M-Link {subscription_name} 구독 갱신 결제가 예정되어 있습니다.

결제 예정일: {billing_date}
결제 금액: {amount:,}원

결제 링크: {payment_link}

위 링크를 클릭하여 결제를 완료해주세요.

감사합니다.
M-Link 팀
    """
    
    return send_email(user_email, subject, body_html, body_text)

