from django.db.models.signals import post_save
from django.dispatch import receiver
from academics.models import AcademicClass, StudentEnrollment, SubjectTeacher
from .managers import ChatRoomManager
import logging

logger = logging.getLogger(__name__)


@receiver(post_save, sender=AcademicClass)
def create_class_group(sender, instance, created, **kwargs):
    """Auto-create class group when a new academic class is created"""
    if created:
        try:
            ChatRoomManager().get_class_group(instance)
        except Exception as e:
            # Log error but don't break the class creation
            logger.error(f"Failed to create chat group for AcademicClass {instance.id}: {str(e)}")
            # Optional: print to console for debugging
            print(f"Chat group creation failed for class {instance.id}: {e}")


@receiver(post_save, sender=StudentEnrollment)
def add_student_to_class_group(sender, instance, created, **kwargs):
    """Add student to class group when enrolled"""
    if created and instance.is_active:
        try:
            from .models import ChatParticipantStudent

            # Get class group
            room = ChatRoomManager().get_class_group(instance.academic_class)

            # Add student to group
            ChatParticipantStudent.objects.get_or_create(
                room=room, student=instance.student, defaults={"role": "MEMBER"}
            )
        except Exception as e:
            logger.error(f"Failed to add student to chat group: {str(e)}")
            print(f"Failed to add student {instance.student.id} to chat group: {e}")


@receiver(post_save, sender=SubjectTeacher)
def create_subject_group(sender, instance, created, **kwargs):
    """Auto-create subject group when subject teacher is assigned"""
    if created and instance.is_active:
        try:
            ChatRoomManager().get_subject_group(instance.subject, instance.academic_class)
        except Exception as e:
            logger.error(f"Failed to create subject group: {str(e)}")
            print(f"Subject group creation failed: {e}")