
from BasicData.models import Enseignant, Note,Etudiant,Evaluation,TypeEvaluation,Ecue,Session,Annee,Deliberation



#TODO: Calcul de Moyenne
def get_etudian_moyenne(etudiant, ecue, session):
    note_list = []
    moyenne=0
    # On recupere les evaluations de l'ecue par session
    evaluations = Evaluation.objects.filter(ecue=ecue, session=session)
    for evaluation in evaluations:
        # On recupere les notes de chaque evalutions par etudiant
        notes = Note.objects.filter(etudiant__nce=etudiant, evaluation_id=evaluation.id)
        for note in notes:
            # Recupere la note de : Examen
            if note.evaluation.typeEvaluation.id == 1:
                total = note.note * 0.6
                print(note.evaluation.typeEvaluation.libelle)
                note_list.append(total)
            else:
                total = note.note * 0.4
                note_list.append(total)

        moyenne = sum(note_list)
    return moyenne


#TODO: GET NOTE
def get_evalution_note(etudiant,annee,ecue,enseignant):
    # On Recupere toute les evaluations de l'enseignant
    eval_note =''
    note_etudiant = []
    EvalEnsg = Evaluation.objects.filter(enseignant=enseignant,ecue=ecue,annee=annee)
    # pour chaque evaluation on recupere la de l'etudiant
    for EnsEval in EvalEnsg:
        try:
            notes = Note.objects.get(etudiant=etudiant, evaluation=EnsEval,annee=annee,ecue=ecue)
            eval_note = notes.note
        except Note.DoesNotExist:
            notes = None
            eval_note = 0
        note_etudiant.append(eval_note)
    return note_etudiant


#TODO: GET MOYENNE ECUE
def get_moyenne_ecue(etudiant,annee,ecue,enseignant,test):
    # On recupere les evaluations de l'enseignant
    evaluations = Evaluation.objects.filter(ecue=ecue.id, annee=annee,enseignant=enseignant)
    # On recupere tout les notes de cc en fonction de (etudiant,evaluation,annee)
    # Pour chaque evaluations on recupere les de l'etudiant
    tottal_cc = 0
    nombre_cc = 0
    tottal_ue = 0
    nombre_ue = 0
    session = None
    for evaluation in evaluations:
        try:
            #pour chaque etudiant on recuper les note
            notes_cc2 = Note.objects.get(etudiant=etudiant, evaluation=evaluation, annee=annee,ecue=ecue)
            if evaluation.typeEvaluation.libelle == 'Contrôle Continu':
                tottal_cc += notes_cc2.note
                nombre_cc += 1
            else:
                tottal_ue += notes_cc2.note
                nombre_ue += 1
                session = evaluation.session
        except Note.DoesNotExist:
            notes_cc2 = None
    # CALCUL DE MOYENNE CC
    moyenne_cc = 0
    if nombre_cc != 0:
        moyenne_cc = tottal_cc / nombre_cc
    else:
        moyenne_cc = 0

    # CALCUL DE MOYENNE UE
    if nombre_ue != 0:
        moyenne_ue = tottal_ue/ nombre_ue
        # MOYENNE GENERALE
        myenne_generale = (moyenne_cc * 0.4) + (moyenne_ue * 0.6)
    else:
        moyenne_ue = 0
        myenne_generale =0

    if test =='mecue':
        resultat = myenne_generale
    elif test == 'sess':
        resultat = session

    return resultat


#TODO: GET ECUE DELIBERATION
def get_seuil_deliberation_ecue(annee,ecue,session):
    seuil = 0
    if session:
        try:
            deliberation = Deliberation.objects.get(ecue=ecue, annee=annee, session=session)  #
            seuil = deliberation.note
        except Deliberation.DoesNotExist:
            seuil = 0
    resultat = seuil
    return resultat