from datetime import datetime
from .models import *
import csv
import pandas as pd


def insert_annee(fic):
    with open(fic) as csvFile:
        reader = csv.DictReader(csvFile)
        for row in reader:
            Annee.objects.create(id=row['id'], libelle=row["libelle"])


########################################################################################################################
########################################################################################################################



def insert_domaine(fic):
    with open(fic) as csvFile:
        reader = csv.DictReader(csvFile)
        for row in reader:
            Domaine.objects.create(id=row['id'], libelle=row["libelle"])


########################################################################################################################
########################################################################################################################



def insert_mention(fic):
    with open(fic) as csvFile:
        reader = csv.DictReader(csvFile)
        for row in reader:
            Mention.objects.create(id=row['id'], libelle=row["libelle"])


########################################################################################################################
########################################################################################################################


def insert_parcours(fic):
    with open(fic) as csvFile:
        reader = csv.DictReader(csvFile)
        for row in reader:
            Parcours.objects.create(id=row['id'], libelle=row["libelle"])


########################################################################################################################
########################################################################################################################


def insert_session(fic):
    with open(fic) as csvFile:
        reader = csv.DictReader(csvFile)
        for row in reader:
            Domaine.objects.create(id=row['id'], libelle=row["libelle"])


########################################################################################################################
########################################################################################################################


def insert_ufr(fic):
    with open(fic) as csvFile:
        reader = csv.DictReader(csvFile)
        for row in reader:
            Ufr.objects.create(id=row['id'], libelle=row["libelle"], domaine_id=row['domaine'])


########################################################################################################################
########################################################################################################################


def insert_semestre(fic):
    with open(fic) as csvFile:
        reader = csv.DictReader(csvFile)
        for row in reader:
            Semestre.objects.create(id=row['id'], libelle=row["libelle"])


########################################################################################################################
########################################################################################################################

def insert_ue(fic):
    with open(fic) as csvFile:
        reader = csv.DictReader(csvFile)
        for row in reader:
            Ue.objects.create(id=row['id'], code=row["code"], libelle=row["libelle"], ufr_id=row['ufr'])
            

########################################################################################################################
########################################################################################################################
#  

def insert_ecue(fic):
    with open(fic) as csvFile:
        reader = csv.DictReader(csvFile)
        for row in reader:
            Ecue.objects.create(id=row['id'], code=row["code"], libelle=row["libelle"], credit=row['credit'], ue_id=row['ue'])
          
 
########################################################################################################################
########################################################################################################################


def insert_grade_mention_ufr():
    for grade in Grade.objects.all():
        for mention in Mention.objects.all():
            for ufr in Ufr.objects.all():
                if any(x in ufr.libelle for x in mention.libelle):
                    GradeMentionUfr.objects.create(
                        grade=grade, 
                        mention=mention, 
                        ufr=ufr,
                        libelle=grade.libelle + " " + mention.libelle + " " + ufr.libelle
                    )
               

########################################################################################################################
########################################################################################################################


def insert_parcours_semestre():
    for semestre in Semestre.objects.all():
        for parcour in Parcours.objects.all():
            for gmu in GradeMentionUfr.objects.all():
                if any(x in gmu.ufr.libelle for x in parcour.libelle):
                    ParcoursSemestre.objects.create(semestre=semestre, parcours=parcour, gradeMentionUfr=gmu)


########################################################################################################################
########################################################################################################################

def insert_parcours_semestre_ue():
    for semestre in ParcoursSemestre.objects.all():
        for ue in Ue.objects.all():
            if ue.ufr.__eq__(semestre.gradeMentionUfr.ufr):
                ParcoursSemestreUe.objects.create(ue=ue, parcoursSemestre=semestre, annee=Annee.objects.last())



########################################################################################################################
########################################################################################################################



def inscrire_etudiant(fic, ufr):
    with open(fic) as csvFile:
        reader = csv.DictReader(csvFile)
        for row in reader:
            datenaiss = datetime.strptime(row['datenaiss'], "%d/%m/%Y").strftime("%Y-%m-%d")
            etudiant = Etudiant.objects.create(nce=row['nce'], prenoms=row["prenom"], datenaiss=datenaiss, lieunaiss=row["lieunaiss"], email=row["mails"])
            etudiant.set_password(row["mails"])
            etudiant.save()
            for ue in ParcoursSemestreUe.objects.filter(ue__ufr__libelle__contains = ufr):
                EtudiantUe.objects.create(etudiant=etudiant, parcoursSemestreUe=ue)
   



########################################################################################################################
########################################################################################################################



def inscrire_enseignant(fic):
    with open(fic) as csvFile:
        reader = csv.DictReader(csvFile)
        for row in reader:
            enseignant = Enseignant.objects.create(nom=row['nom'], prenoms=row["prenom"], email=row["mails"])
            enseignant.set_password(row['mdp'])
            enseignant.save()
            ecue = Ecue.objects.get(code=row['prenom'])
            EnseignantUe.objects.create(enseignant=enseignant, ecue=ecue)
   



########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################


def fullue():
    for ue in Ue.objects.all():
        for ecue in Ecue.objects.all():
            if ecue.libelle[:4].__eq__(ue.libelle[:4]):
                ecue.ue = ue
                ecue.save()

########################################################################################################################
########################################################################################################################
def fullecue():
    for ecue in Ecue.objects.all():
        for ue in Ue.objects.all():
            if (len(ecue.code) > len(ue.code)) and (ecue.code[0:len(ecue.code)-1].__eq__(ue.code)) or (len(ecue.code) == len(ue.code)) and (ecue.code.__eq__(ue.code)):
                ecue.ue = ue
                ecue.save()

            

########################################################################################################################
########################################################################################################################    


def enseignantUe(fic):
    with open(fic) as csvFile:
        reader = csv.DictReader(csvFile)
        for row in reader:
            email = row['nom'][0].strip().lower()+"."+row['prenoms'].strip().lower()+"@usp.com"
            ecue = Ecue.objects.get(code=row["codeecue"])
            enseignant = Enseignant(nom=row['nom'], prenoms=row['prenoms'], email=email, ufr=ecue.ue.ufr)
            enseignant.set_password("qwerty12@")
            enseignant.save()
            EnseignantUe.objects.create(enseignant=enseignant, ecue=Ecue.objects.get(code=row['codeecue']))



########################################################################################################################
########################################################################################################################


def fullenseignant(fic):
    with open(fic) as csvFile:
        reader = csv.DictReader(csvFile)
        for row in reader:
            print(row['nom'])
            enseignant = Enseignant.objects.create(nom=row['nom'], prenoms=row['prenom'], email=row['mails'])
            enseignant.set_password(row['mdp'])
            enseignant.save()
            print(row['nom'], row['prenom'])
            for ecue in Ue.objects.get(code= row['prenom']).ecues.all():
                EnseignantUe.objects.create(enseignant=enseignant, ecue=ecue, annee=Annee.objects.last())

########################################################################################################################
########################################################################################################################

def fulletudiant(fic):
    with open(fic) as csvFile:
        reader = csv.DictReader(csvFile)
        for row in reader:
            datenaiss = datetime.strptime(row['datenaiss'], "%d/%m/%Y").strftime("%Y-%m-%d")
            etudiant = Etudiant.objects.create(nce=row['nce'], nom=row['nom'], prenoms=row['prenom'], datenaiss=datenaiss, lieunaiss=row['lieunaiss'], email=row['mails'])
            etudiant.set_password(row['mdp'])
            etudiant.save()
            print(row['nom'])
            for ue in ParcoursSemestreUe.objects.filter(ue__ufr__libelle__icontains = row['ufr']):
                
                # On verifie si parcoursSemestreUe existe deja pour cet etudiant
                try:
                    EtudiantUes = EtudiantUe.objects.get(etudiant=etudiant,parcoursSemestreUe=ue)
                except EtudiantUe.DoesNotExist:
                    EtudiantUes =None
                    
                # Si oui on passe sans enregistrer
                if EtudiantUes:
                    pass
                else:
                    # Sinon on crée le nouvel objet
                    EtudiantUe.objects.create(etudiant=etudiant, parcoursSemestreUe=ue)



########################################################################################################################
########################################################################################################################




########################################################################################################################
########################################################################################################################


def fulldelete(fic):
    with open(fic) as csvFile:
        reader = csv.DictReader(csvFile)
        for row in reader:
            try:
                user = Etudiant.objects.get(nce=row['nce'])
                EtudiantUe.objects.filter(etudiant=user).delete()
                user.delete()
            except User.DoesNotExist:
                pass
            
########################################################################################################################
########################################################################################################################

def inscrire(fic):
    with open(fic) as csvFile:
        reader = csv.DictReader(csvFile)
        for row in reader:
            etudiant = Etudiant.objects.get(nce=row['nce'])
            for ue in ParcoursSemestreUe.objects.filter(ue__ufr__libelle__contains = "Tour"):
                EtudiantUe.objects.create(etudiant=etudiant, parcoursSemestreUe=ue)
            



########################################################################################################################
########################################################################################################################
def fullmention():
    Mention.objects.create(libelle="Oceanographie, RESSOURCES MARINE ET SCIENCES DES LITTORAUX (SDL)")
    Mention.objects.create(libelle="Tourisme, Espaces et sociétés")
    Mention.objects.create(libelle="INGENIERIE COTIERE")
    Mention.objects.create(libelle="SCIENCES AGRONOMIQUES")
    Mention.objects.create(libelle="GESTION-LOGISTIQUE")
    Mention.objects.create(libelle="INGENIERIE NAVALE")


########################################################################################################################
########################################################################################################################
def fullgrade():
    Grade.objects.create(libelle="Licence")
    Grade.objects.create(libelle="Master")
    Grade.objects.create(libelle="Doctorat")


########################################################################################################################
########################################################################################################################
def fullsemestre():
    Semestre.objects.create(libelle="Semestre 1")
    Semestre.objects.create(libelle="Semestre 2")
    

########################################################################################################################
########################################################################################################################
def delete_enseignant():
    for ens in Enseignant.objects.all():
        ens.delete()

########################################################################################################################
########################################################################################################################
def add_niveau_etudiant():
    etudiants = Etudiant.objects.all()
    annee = Annee.objects.last()
    niveau = Niveau.objects.get(id=1)

    for etudiant in etudiants:
        try:
            etudNiv = NiveauEtudiant.objects.get(etudiant=etudiant,niveau=niveau,annee=annee)
        except NiveauEtudiant.DoesNotExist:
            etudNiv = None

        if etudNiv:
            pass
        else:
            NiveauEtudiant.objects.create(
                etudiant=etudiant,
                niveau= niveau,
                annee=annee
            )
            print(etudiant)


########################################################################################################################
########################################################################################################################
#TODO: AJOUTER LE GENRE D'UN ETUDIANT
def add_genre(fic):
    # ON OUVRE LE FICHIER
    datas = pd.read_csv(fic, delimiter=';')
    for i, data in datas.iterrows():
        try:
            # On récupère l'étudiant grâce au NCE
            etudiant = Etudiant.objects.get(nce=data['NCE'])
        except Etudiant.DoesNotExist:
            etudiant =None

        if etudiant:
            # On vérifie si le Genre est déja renseigné
            if etudiant.sexe =='M' or etudiant.sexe =='F':
                pass
            else:
                etudiant.sexe = data['GENRE']
                etudiant.save()


########################################################################################################################
########################################################################################################################
#TODO: MISE A JOUR DU MODELE ENSEIGNANT-UFR
def enseignantUfr_update():
    # ON RECUPERE LES ENSEIGNANT
    enseignants = Enseignant.objects.filter(is_ue=False)
    annee = Annee.objects.last()

    for ens in enseignants:
        # On verifie si cette données existe déja
        is_ensUfr = EnseignantUfr.objects.filter(annee=annee,enseignant=ens,ufr=ens.ufr)
        if is_ensUfr:
            pass
        else:
            # On crée l'objet
            EnseignantUfr.objects.create(annee=annee,enseignant=ens,ufr=ens.ufr)


########################################################################################################################
########################################################################################################################
#TODO: MISE A JOURS UE
def ue_update(ufrId,fichier):
    # ON OUVRE LE FICHIER
    datas = pd.read_csv(fichier, delimiter=';')
    datas.dropna(how="all", inplace=True) # ELIMINE LES LIGNES VIDES
    with open(fichier) as csvFile:
        reader = csv.DictReader(csvFile)
        for row in reader:
            #etudiant = Etudiant.objects.get(nce=row['nce'])
            for ue in ParcoursSemestreUe.objects.filter(ue__ufr__id=ufrId):
                # On verifie si parcoursSemestreUe existe deja pour cet etudiant
                try:
                    EtudiantUes = EtudiantUe.objects.filter(etudiant__nce=row['nce'], parcoursSemestreUe=ue)
                except EtudiantUe.DoesNotExist:
                    EtudiantUes = None

                # Si oui on passe sans enregistrer
                if EtudiantUes:
                    pass
                else:
                    # Sinon on crée le nouvel objet
                    EtudiantUe.objects.create(etudiant=Etudiant.objects.get(nce=row['nce']), parcoursSemestreUe=ue)


########################################################################################################################
########################################################################################################################
#TODO: MISE A JOURS UE
def ue_update_semestre():
    # ON RECUPERE LES UES
    ues =  Ue.objects.all()
    for ue in ues:
        print(ue)
        semestreparcs = ParcoursSemestreUe.objects.filter(ue=ue,annee=Annee.objects.last())
        if semestreparcs:
            for semestrepar in semestreparcs:
                #print()
                ue.semestre = semestrepar.parcoursSemestre.semestre
                ue.save()
            print(len(semestreparcs))
            print("****************************")


########################################################################################################################
########################################################################################################################
#TODO: MISE A JOURS ETUDIANT UFR
def etudiant_ufr_update():
    # ON RECUPERE LES ETUDIANTS
    etudiants = Etudiant.objects.all()
    for etudiant in etudiants:
        ufr = EtudiantUe.objects.filter(etudiant=etudiant).first()
        etudiant.ufr = ufr.parcoursSemestreUe.ue.ufr
        etudiant.save()


########################################################################################################################
########################################################################################################################
#TODO: MISE A JOURS UE-ECUE [field=used]
def ue_ecue_filed_update(qs):
    # ON RECUPERE LES ETUDIANTS
    print(Ue.objects.get(id=1037))
    for an in Annee.objects.all():
        for item in qs:
            #item.used.remove(an)
            #item.active=True
            #item.save()
            pass


########################################################################################################################
########################################################################################################################
#TODO: SESSION 1
def set_evaluation_default_session():
    evals = Evaluation.objects.all()
    for eval in evals:
        #eval.session = Session.objects.get(id=1)
        #eval.save()
        print(str(eval)+'-'+str(eval.session))



########################################################################################################################
########################################################################################################################
#TODO: SESSION 1
def update_etudiant_process(data):
    for nc in data:
        etudiant = Etudiant.objects.filter(nce=nc).last()
        etudiant.process =True
        etudiant.save()


########################################################################################################################
########################################################################################################################
#TODO: MISE A JOURS NCE
def nce_update(fichier):
    # ON OUVRE LE FICHIER
    with open(fichier, 'r') as csvFile:
        reader = csv.reader(csvFile,delimiter=';')
        for i, row in enumerate(reader):
            if i == 0:
                pass
            else:
                etudiant =  Etudiant.objects.filter(nce=row[1]).last()
                #print(etudiant)
                if etudiant and etudiant.ancien_nce is None:
                    etudiant.ancien_nce = etudiant.nce
                    etudiant.nce = row[0]
                    etudiant.save()
                else:
                    print('Update Done')


########################################################################################################################
########################################################################################################################
#TODO: MISE A JOURS GENRE
def add_genre_new(fichier):
    # ON OUVRE LE FICHIER
    datas = pd.read_csv(fichier, delimiter=';')
    datas.dropna(how="all", inplace=True)
    for i, data in datas.iterrows():
        etudiant = Etudiant.objects.filter(nce=data['NCE']).last()
        #print(len(data['GENRE'].strip()))
        if etudiant:
            if data['GENRE'].strip() == 'masculin':
                etudiant.sexe = 'M'
                etudiant.save()
                print(etudiant.sexe)
            elif data['GENRE'].strip() == 'feminin':
                etudiant.sexe = 'F'
                etudiant.save()
                print(etudiant.sexe)
            else:pass


########################################################################################################################
########################################################################################################################
#TODO: ADD SINGLE ID
def single_id_update(id,new_id):
    etudiant = Etudiant.objects.filter(id=id).last()
    if etudiant:
        etudiant.nce = new_id
        etudiant.save()



