from django.db import models

class Enseignant(models.Model):
    nom = models.CharField(max_length=100, blank=True, null=True)
    tel = models.CharField(max_length=30, blank=True, null=True)
    email = models.EmailField(unique=True)
    login = models.CharField(max_length=50, blank=True, null=True)
    password = models.CharField(max_length=100, blank=True, null=True)
    status = models.CharField(max_length=20, blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'enseignant'

    def __str__(self):
        return self.nom


class Entete(models.Model):
    nom_etab = models.CharField(max_length=50, blank=True, null=True)
    annee_scol = models.CharField(max_length=30, blank=True, null=True)
    region = models.CharField(max_length=30, blank=True, null=True)
    department = models.CharField(max_length=30, blank=True, null=True)
    status = models.CharField(max_length=20, blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'entete'

    def __str__(self):
        return self.nom_etab

class Matiere(models.Model):
    libelle = models.CharField(unique=True, max_length=30, blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'matiere'

    def __str__(self):
        return self.libelle

class Classe(models.Model):
    class_code = models.CharField(max_length=50, blank=True, null=True)
    serie = models.CharField(max_length=20, blank=True, null=True)
    niveau = models.CharField(max_length=20, blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'classe'

    def __str__(self):
        return self.class_code


class Epreuve(models.Model):
    libelle = models.CharField(max_length=50, blank=True, null=True)
    nbre_point = models.IntegerField(blank=True, null=True)
    coef = models.IntegerField(blank=True, null=True)
    duree = models.CharField(max_length=20, blank=True, null=True)
    models.ForeignKey(Classe, on_delete=models.CASCADE)
    status = models.CharField(max_length=20, blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'epreuve'

    def __str__(self):
        return self.libelle


class Exercice(models.Model):
    titre = models.TextField(blank=True, null=True)
    enoncer = models.TextField(blank=True, null=True)
    nbre_point = models.IntegerField(blank=True, null=True)
    status = models.CharField(max_length=20, blank=True, null=True)
    id_enseignant = models.ForeignKey(Enseignant, on_delete=models.CASCADE)
    id_matiere = models.ForeignKey(Matiere, on_delete=models.CASCADE)
    id_classe = models.ForeignKey(Classe, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'exercice'

    def __str__(self):
        return self.titre

class ExerciceEpreuve(models.Model):
    id_epreuve = models.ForeignKey(Epreuve, on_delete=models.CASCADE)
    id_exercice = models.ForeignKey(Exercice, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'exercice_epreuve'


class MonterSujet(models.Model):
    id_entete = models.ForeignKey(Entete, on_delete=models.CASCADE)
    id_epreuve = models.ForeignKey(Epreuve, on_delete=models.CASCADE)
    id_enseignant = models.ForeignKey(Enseignant, on_delete=models.CASCADE)
    date_montage = models.DateField(blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'monter_sujet'


class Question(models.Model):
    enoncer = models.TextField(blank=True, null=True)
    nbre_point = models.IntegerField(blank=True, null=True)
    graphique = models.TextField(blank=True, null=True)
    status = models.CharField(max_length=20, blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'question'

    def __str__(self):
        return self.enoncer


class QuestionExercice(models.Model):
    id_exercice = models.ForeignKey(Exercice, on_delete=models.CASCADE)
    id_question = models.ForeignKey(Question, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'question_exercice'


class Recompense(models.Model):
    libelle = models.CharField(max_length=50, blank=True, null=True)
    score = models.IntegerField(blank=True, null=True)
    id_enseignant = models.ForeignKey(Enseignant, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'recompense'