"""
Сигналы для домашних заданий.
"""
from django.db.models.signals import post_save, pre_save, post_delete
from django.dispatch import receiver
from django.utils import timezone
from .models import Homework, HomeworkSubmission
import logging

logger = logging.getLogger(__name__)


@receiver(post_save, sender=Homework)
def homework_post_save(sender, instance, created, **kwargs):
    """
    Обработчик после сохранения домашнего задания.
    """
    if created:
        # При создании нового задания обновляем статистику
        instance.update_statistics()
        logger.info(f"Создано новое домашнее задание: {instance.id} - {instance.title}")


@receiver(post_save, sender=HomeworkSubmission)
def homework_submission_post_save(sender, instance, created, **kwargs):
    """
    Обработчик после сохранения решения домашнего задания.
    """
    if created:
        # При создании нового решения проверяем опоздание
        instance.check_if_late()
        
        # Обновляем статистику задания
        instance.homework.update_statistics()
        
        logger.info(f"Создано новое решение ДЗ: {instance.id} для задания {instance.homework.id}")
    
    # При изменении статуса или черновика от ИИ — обновляем статистику задания (в т.ч. ai_draft_submissions)
    if not created:
        update_fields = kwargs.get('update_fields')
        if update_fields is not None:
            if 'status' in update_fields or 'ai_checked_at' in update_fields:
                instance.homework.update_statistics()


@receiver(pre_save, sender=HomeworkSubmission)
def homework_submission_pre_save(sender, instance, **kwargs):
    """
    Обработчик перед сохранением решения домашнего задания.
    
    Автоматически переводит в статус 'checking' если включена автоматическая проверка.
    """
    # Если решение создается впервые и у задания включена автоматическая проверка
    if not instance.pk and instance.homework.auto_check_enabled:
        instance.status = 'checking'


@receiver(post_delete, sender=HomeworkSubmission)
def homework_submission_post_delete(sender, instance, **kwargs):
    """
    После удаления решения — обновить статистику задания,
    чтобы колонки канбана (Ожидают / На проверке и т.д.) отображались верно.
    """
    try:
        homework = Homework.objects.get(id=instance.homework_id)
        homework.update_statistics()
    except Homework.DoesNotExist:
        pass

