"""Celery tasks for email sending."""

from uuid import UUID

from app.services.email_service import EmailService
from app.tasks import celery_app


@celery_app.task(bind=True, max_retries=3)
def send_email_task(self, task_type: str, application_id: str):
    """
    Async task to send emails.
    
    Args:
        task_type: Type of email to send (confirmation, admission, rejection)
        application_id: Application UUID as string
    """
    from sqlalchemy.orm import Session
    
    from app.database import SessionLocal
    from app.models.application import Application
    
    db: Session = SessionLocal()
    try:
        # Get application
        app_uuid = UUID(application_id)
        application = db.query(Application).filter(Application.id == app_uuid).first()
        
        if not application:
            raise ValueError(f"Application {application_id} not found")
        
        # Send appropriate email
        if task_type == "confirmation":
            result = EmailService.send_confirmation_email(application)
        elif task_type == "admission":
            result = EmailService.send_admission_email(application)
        elif task_type == "rejection":
            result = EmailService.send_rejection_email(application)
        else:
            raise ValueError(f"Unknown email task type: {task_type}")
        
        if not result.get("success"):
            raise Exception(result.get("error", "Email sending failed"))
        
        return result
    except Exception as exc:
        # Retry on failure
        raise self.retry(exc=exc, countdown=60)
    finally:
        db.close()
