from django.db import models
from accounts.models import User


class StudentProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    target_exam = models.CharField(max_length=100, blank=True)
    graduation_year = models.IntegerField(null=True, blank=True)
    weak_subject = models.CharField(max_length=100, blank=True)

    def __str__(self):
        return self.user.email


class DailyQuiz(models.Model):

    date = models.DateField(unique=True)

    total_questions = models.IntegerField(default=0)

    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"Quiz - {self.date}"


class DailyQuizQuestion(models.Model):

    quiz = models.ForeignKey(
        DailyQuiz,
        on_delete=models.CASCADE,
        related_name="quiz_questions"
    )

    question = models.ForeignKey(
        'question_bank.QuestionBank',
        on_delete=models.CASCADE
    )

    order = models.IntegerField(default=0)

    class Meta:
        unique_together = ('quiz', 'question')
        ordering = ['order']

    def __str__(self):
        return f"{self.quiz.date} - Q{self.order}"


class StudentDailyQuizAttempt(models.Model):

    student = models.ForeignKey(User, on_delete=models.CASCADE)

    quiz = models.ForeignKey(DailyQuiz, on_delete=models.CASCADE)

    score = models.IntegerField(default=0)

    submitted_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        unique_together = ('student', 'quiz')

    def __str__(self):
        return f"{self.student.email} - {self.quiz.date}"


class StudentDailyQuizAnswer(models.Model):

    attempt = models.ForeignKey(
        StudentDailyQuizAttempt,
        on_delete=models.CASCADE,
        related_name="answers"
    )

    question = models.ForeignKey(
        'question_bank.QuestionBank',
        on_delete=models.CASCADE
    )

    selected_option = models.CharField(max_length=1)

    def __str__(self):
        return f"{self.attempt.student.email} - Q{self.question.id}"