from django.db import models
from core.models import Group, Subject
from users.models import Teacher, Student


class Assignment(models.Model):
    title = models.CharField(max_length=255, verbose_name='Название')
    description = models.TextField(blank=True, verbose_name='Описание')
    groups = models.ManyToManyField(Group, related_name='assignments', verbose_name='Группы')
    subject = models.ForeignKey(Subject, on_delete=models.CASCADE, verbose_name='Предмет')
    teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE, verbose_name='Преподаватель')
    deadline = models.DateField(verbose_name='Срок сдачи')

    # Материалы к заданию
    material_file = models.FileField(upload_to='assignments/materials/', blank=True, null=True,
                                     verbose_name='Файл материала')
    material_link = models.URLField(blank=True, null=True, verbose_name='Ссылка на материал')
    material_text = models.TextField(blank=True, null=True, verbose_name='Текст материала')

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = 'Задание'
        verbose_name_plural = 'Задания'
        ordering = ['-deadline']


class AssignmentSubmission(models.Model):
    STATUS_CHOICES = (
        ('not_submitted', 'Не сдано'),
        ('submitted', 'Сдано'),
        ('late', 'Сдано с опозданием'),
        ('graded', 'Проверено'),
    )
    assignment = models.ForeignKey(Assignment, on_delete=models.CASCADE, related_name='submissions')
    student = models.ForeignKey(Student, on_delete=models.CASCADE, related_name='assignment_submissions')
    status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='not_submitted')
    file = models.FileField(upload_to='submissions/', blank=True, null=True, verbose_name='Файл ответа')
    comment = models.TextField(blank=True, verbose_name='Комментарий')
    grade = models.IntegerField(null=True, blank=True, verbose_name='Оценка')
    submitted_at = models.DateTimeField(null=True, blank=True, verbose_name='Дата сдачи')
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        unique_together = ['assignment', 'student']
        verbose_name = 'Сдача задания'
        verbose_name_plural = 'Сдачи заданий'