from django.db import models
from django.core.validators import MinValueValidator, MaxValueValidator
import uuid
from django.utils import timezone

def default_data():
    return {'ops': [{'insert': '\n'}]}

class Exercise(models.Model):

    title = models.CharField(null=True, blank=True, max_length=255) # Stock un éventuel titre de la flashcard
    instructions = models.JSONField(default=default_data, max_length=1023)
    visibleAnswer = models.JSONField(default=default_data, null=True, blank=True, max_length=2047)
    correctAnswer = models.CharField(null=True, blank=True, max_length=2047)
    subjectStudied = models.CharField(max_length=3, default='na')
    academicLevel = models.CharField(max_length=3, default='na')
    school = models.CharField(max_length=255, default='')
    training = models.CharField(max_length=255, default='')
    tags = models.JSONField(default=dict)
    lastRevisionTime = models.DateTimeField(default=timezone.now)
    numberOfAnswers = models.IntegerField(validators=[MinValueValidator(0)], default=0)
    mastered = models.BooleanField(default=False)
    hidden = models.BooleanField(default=False)
    difficulty = models.FloatField(validators=[MinValueValidator(0), MaxValueValidator(5)], default=0)
    creationDate = models.DateTimeField(auto_now_add=True)
    modificationDate = models.DateTimeField(auto_now=True)
    publicIdentifier = models.UUIDField(unique=True, default=uuid.uuid4) # stock une chaine de caractère généré par uuid
    course = models.ForeignKey('course.Course', to_field='publicIdentifier', on_delete=models.CASCADE, related_name='exercises')
    user = models.ForeignKey('user.User', to_field='publicIdentifier', on_delete=models.CASCADE, related_name='exercises', blank=True, null=True)

    def save(self, *args, **kwargs):

        if self.course.user and not self.pk:
            self.user = self.course.user
        
        super(Exercise, self).save(*args, **kwargs)