from django.conf import settings
from django.db.models.signals import pre_save, post_save
from django.dispatch import receiver
from django.core.mail import send_mail
from django.utils.html import strip_tags
from .models import Alumno

# 1. CAPTURAMOS DATOS ANTERIORES
@receiver(pre_save, sender=Alumno)
def capturar_datos_anteriores(sender, instance, **kwargs):
    if instance.pk:
        try:
            viejo = Alumno.objects.get(pk=instance.pk)
            instance._estado_anterior = viejo.estado_actual
            instance._fecha_cita_anterior = viejo.fecha_cita
            # ¡NUEVO! Capturamos el correo que tenía antes de este guardado
            instance._correo_anterior = viejo.correo 
        except Alumno.DoesNotExist:
            instance._estado_anterior = None
            instance._fecha_cita_anterior = None
            instance._correo_anterior = None
    else:
        # Si es un alumno 100% nuevo, no hay pasado
        instance._estado_anterior = None
        instance._fecha_cita_anterior = None
        instance._correo_anterior = None

# 2. ENVIAMOS LOS CORREOS
@receiver(post_save, sender=Alumno)
def notificar_cambios_tramite(sender, instance, created, **kwargs):
    if not instance.correo:
        return

    estado_texto = dict(instance.EstadoTramite.choices).get(instance.estado_actual, '')
    enviar_correo = False
    
    # Detectamos cambios
    cambio_estado = hasattr(instance, '_estado_anterior') and instance._estado_anterior != instance.estado_actual
    cambio_cita = hasattr(instance, '_fecha_cita_anterior') and instance._fecha_cita_anterior != instance.fecha_cita and instance.fecha_cita
    correo_nuevo = hasattr(instance, '_correo_anterior') and not instance._correo_anterior and instance.correo

    # --- ESCENARIO A: ALUMNO NUEVO O CORREO RECIÉN AGREGADO ---
    if created or correo_nuevo:
        asunto = 'ISAP - Registro de Trámite de Titulación'
        titulo_mensaje = 'Notificación de Registro'
        parrafo_principal = f'El <strong>ISAP</strong> le informa que su trámite ha sido vinculado a este correo electrónico exitosamente.'
        enviar_correo = True

    # --- ESCENARIO B: PRIORIDAD CITA (Incluso si cambió el estado al mismo tiempo) ---
    elif cambio_cita:
        asunto = 'ISAP - Cita Programada para Entrega de Título'
        titulo_mensaje = 'Cita de Entrega de Documentos'
        fecha_formateada = instance.fecha_cita.strftime('%d/%m/%Y a las %H:%M')
        
        parrafo_principal = f"""
        Le informamos que se ha programado su cita para la entrega oficial de su título profesional.<br><br>
        <strong>Fecha y Hora:</strong> {fecha_formateada} hrs.<br>
        <strong>Lugar:</strong> ISAP (Calle Comonfort Avenida Tehuantepec esq, Centenario, 83260 Hermosillo, Son.).
        """
        enviar_correo = True

    # --- ESCENARIO C: SOLO CAMBIO DE ESTADO ---
    elif cambio_estado:
        asunto = 'ISAP - Actualización en su Trámite de Titulación'
        titulo_mensaje = 'Actualización de Trámite'
        parrafo_principal = 'El <strong>ISAP</strong> le informa que ha habido un avance en su trámite de titulación.'
        enviar_correo = True

    if not enviar_correo:
        return

    # Construcción del HTML
    mensaje_html = f"""
    <div style="font-family: Arial, sans-serif; background-color: #f4f4f4; padding: 30px;">
        <div style="max-width: 600px; margin: 0 auto; background-color: #ffffff; padding: 30px; border-radius: 8px; border-top: 5px solid #2c3e50;">
            <h2 style="color: #2c3e50; margin-top: 0; border-bottom: 1px solid #eeeeee; padding-bottom: 10px;">
                {titulo_mensaje}
            </h2>
            <p style="color: #555555; line-height: 1.6; font-size: 16px;">
                Estimado(a) alumno(a) <strong>{instance.nombre}</strong>,
            </p>
            <p style="color: #555555; line-height: 1.6; font-size: 16px;">
                {parrafo_principal}
            </p>
            <div style="background-color: #f8f9fa; padding: 15px; border-left: 4px solid #198754; margin: 20px 0;">
                <p style="margin: 0; color: #333333; font-size: 15px;">
                    El estado actual de su trámite es:<br>
                    <strong style="font-size: 16px; color: #198754;">{estado_texto}</strong>
                </p>
            </div>
            <p style="color: #555555; line-height: 1.6; font-size: 16px;">
                Puede consultar los detalles con su matrícula: <strong style="color: #2c3e50;">{instance.matricula}</strong>
            </p>
            <div style="text-align: center; margin: 35px 0;">
                <a href="https://titulos.isap.edu.mx" 
                   style="background-color: #2c3e50; color: #ffffff; padding: 14px 28px; text-decoration: none; border-radius: 5px; font-weight: bold; display: inline-block;">
                   Acceder al Portal
                </a>
            </div>
            <hr style="border: none; border-top: 1px solid #eeeeee; margin: 25px 0;">
            <p style="color: #777777; font-size: 13px; margin-bottom: 0;">
                Atentamente,<br>
                <strong>Coordinación de Titulación - ISAP</strong>
            </p>
        </div>
    </div>
    """

    send_mail(
        subject=asunto,
        message=strip_tags(mensaje_html),
        from_email=settings.DEFAULT_FROM_EMAIL,
        recipient_list=[instance.correo],
        fail_silently=False,
        html_message=mensaje_html
    )