from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from BasicData.models import *
from BasicData.templatetags.custom_tag_obj import get_ue_by_ufr_simple
from .forms import *
from BasicData.custom_fonctions import *
from django.contrib.auth import update_session_auth_hash
from django.contrib.auth.forms import PasswordChangeForm
from django.contrib import messages
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger


@login_required(login_url='BasicData:login')
def respo_pedag_home(request):
    # ROLE
    user = Enseignant.objects.get(email=request.user.email)
    context ={
        'user': user,
    }
    return render(request,'respo_pedag/home.html',context)

@login_required(login_url='login')
def rp_programme(request):
    # ROLE
    user = Enseignant.objects.get(email=request.user.email)

    # ON RECUPERE L'UFR/ SES ECUES/ LES NIVEAUX/ LE PROGRAMME
    ############ new Enseignant Ufr ############
    # On recupere les infos du DR
    annee = Annee.objects.last()
    #drUfr = EnseignantUfr.objects.filter(annee=annee, enseignant=user).last()
    # On recupere l'UFR
    UFR = None
    if user:
        UFR = user.ufr
    ############################################
    #ecues = Ecue.objects.filter(ue__ufr=UFR, active=True).order_by('libelle')
    niveaux = Niveau.objects.all()
    salles = Salle.objects.all()
    #print(niveaux)

    validites = Validite.objects.filter(done=False).order_by('dateDebut')[:5]
    validite = Validite.objects.filter(done=False).order_by('dateDebut').first()

    SDM1 = []
    TES2 = []
    ARHAI3 = []
    MPSI4 = []
    CPGE5 = []
    for ufrec in Ufr.objects.all():
        ecues_ufr = Ecue.objects.filter(ue__ufr=ufrec, active=True)
        #ecues_ufr = get_ue_by_ufr_simple(ufrec.id, annee.id)

        for ecu in ecues_ufr:
            if ufrec.id == 1:
                SDM1.append(ecu.code)
            elif ufrec.id == 2:
                TES2.append(ecu.code)
            elif ufrec.id == 3:
                ARHAI3.append(ecu.code)
            elif ufrec.id == 4:
                MPSI4.append(ecu.code)
            else:
                pass

    # FORMULAIRE POUR RECUPERER LA PERIODE SELECTIONNEE
    niveau_data_zip = []
    form = ChoosePeriodeForm()
    if request.method == 'POST' and 'FilterBtn' in request.POST:
        form = ChoosePeriodeForm(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            periode = cd.get('periode')

            if 'aucun' == periode:
                messages.error(request, 'Veuilliez sélectionner une période valide')
            else:
                validite = Validite.objects.get(id=periode)

    # ADD SALLE
    form2 = AddSalleForm2()
    if request.method == 'POST':
        if 'addSalleBtn' in request.POST:
            form2 = AddSalleForm2(request.POST)
            if form2.is_valid():
                cd = form2.cleaned_data
                salle = cd.get('salle')
                PJour = cd.get('jour')
                PrID = cd.get('Progid')
                prog = EmploiDuTemps2.objects.get(id=PrID)
                Sal = Salle.objects.get(id=salle)
                if PJour =='lun':
                    prog.salle_lun = Sal
                elif PJour =='mar':
                    prog.salle_mar = Sal
                elif PJour =='mer':
                    prog.salle_mer = Sal
                elif PJour =='jeu':
                    prog.salle_jeu = Sal
                elif PJour =='ven':
                    prog.salle_ven = Sal
                elif PJour =='sam':
                    prog.salle_sam = Sal
                else:pass
                prog.save()

                messages.success(request,'Salle attribuée avec succès')
                return redirect('/enseignant/rp_programme/')

            else:
                messages.error(request, 'Vérifiez les champs')


    # on rcupere les programme par niveaux
    progNivx = []
    progNivx2 = []
    p_lundi_m = []
    p_lundi_s = []
    p_mardi_m = []
    p_mardi_s = []
    p_mercredi_m = []
    p_mercredi_s = []
    p_jeudi_m = []
    p_jeudi_s = []
    p_vendredi_m = []
    p_vendredi_s = []
    p_samedi_m = []
    p_samedi_s = []
    #for niveau in niveaux:
    progByNiveau = EmploiDuTemps2.objects.filter(validite=validite,activated=True)
    #print(progByNiveau)
    if progByNiveau:
        #progNivx.append(niveau)
        #progNivx2.append(progByNiveau)
        for pro in progByNiveau:

            if pro.lundi != '':
                debut_cours = get_horaire_split(pro.lundi, 'debut')
                if debut_cours <= 12:
                    p_lundi_m.append(pro)
                else:
                    p_lundi_s.append(pro)

            if pro.mardi != '':
                debut_cours = get_horaire_split(pro.mardi, 'debut')
                if debut_cours <= 12:
                    p_mardi_m.append(pro)
                else:
                    p_mardi_s.append(pro)

            if pro.mercredi != '':
                debut_cours = get_horaire_split(pro.mercredi, 'debut')
                if debut_cours <= 12:
                    p_mercredi_m.append(pro)
                else:
                    p_mercredi_s.append(pro)

            if pro.jeudi != '':
                debut_cours = get_horaire_split(pro.jeudi, 'debut')
                if debut_cours <= 12:
                    p_jeudi_m.append(pro)
                else:
                    p_jeudi_s.append(pro)

            if pro.vendredi != '':
                debut_cours = get_horaire_split(pro.vendredi, 'debut')
                if debut_cours <= 12:
                    p_vendredi_m.append(pro)
                else:
                    p_vendredi_s.append(pro)

            if pro.samedi != '':
                debut_cours = get_horaire_split(pro.samedi, 'debut')
                if debut_cours <= 12:
                    p_samedi_m.append(pro)
                else:
                    p_samedi_s.append(pro)
    else:
        pass

    #niveau_data_zip = zip(progNivx, progNivx2)

    context = {
        'user': user,
        'group_check': group_check(request),
        #'ecues': ecues,
        'niveaux': niveaux,
        'salles': salles,
        'form2': form2,
        # 'ecue_data': ecue_data,
        'ndzip': niveau_data_zip,
        'validite': validite,
        'validites': validites,
        'form': form,
        'p_lundi_m': p_lundi_m, 'p_lundi_s': p_lundi_s,
        'p_mardi_m': p_mardi_m, 'p_mardi_s': p_mardi_s,
        'p_mercredi_m': p_mercredi_m, 'p_mercredi_s': p_mercredi_s,
        'p_jeudi_m': p_jeudi_m, 'p_jeudi_s': p_jeudi_s,
        'p_vendredi_m': p_vendredi_m, 'p_vendredi_s': p_vendredi_s,
        'p_samedi_m': p_samedi_m, 'p_samedi_s': p_samedi_s,
        'SDM1': SDM1, 'TES2': TES2, 'ARHAI3': ARHAI3, 'MPSI4': MPSI4,
    }
    return render(request,'respo_pedag/programme.html',context)


@login_required(login_url='BasicData:login')
def rp_view_programme(request):
    # ROLE
    user = Enseignant.objects.get(email=request.user.email)
    # ON RECUPERE TOUTE LES UFR ET LES NIVEAUX
    UFRS = Ufr.objects.all()
    niveaux = Niveau.objects.all()

    # ON RECUPERE LA VALIDITE EN COURS
    validite = 0
    validites = Validite.objects.filter(done=False).order_by('-id')


    ufr = None
    niveau = None
    programmes_ufr =None
    form = ValiditeUFRFilterForm()
    if request.method == 'POST':
        form = ValiditeUFRFilterForm(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            ufr = cd.get('ufr')
            niveau = cd.get('niveau')
            periode = cd.get('periode')

            if 'aucun' == periode:
                messages.error(request,'Veuilliez sélectionner une période valide')
            else:
                validite = Validite.objects.get(id=periode)

            # ON RECUPERE LE PROGRAMME EN COURS DE L'UFR PAR NIVEAU
            if ufr !='0000' and niveau != '0000':
                programmes_ufr = EmploiDuTemps2.objects.filter(validite=validite,ecue__ue__ufr=Ufr.objects.get(id=ufr),niveau=Niveau.objects.get(id=niveau),activated=True)

    context ={
        'user': user,
        'form':form,
        'UFRS':UFRS,
        'niveaux':niveaux,
        'validite':validite,
        'validites':validites,
        'programmes':programmes_ufr,
        'ufr':Ufr.objects.filter(id=ufr).last(),
        'niveau':Niveau.objects.filter(id=niveau).last(),
    }
    return render(request,'respo_pedag/programme_list.html',context)


@login_required(login_url='BasicData:login')
def rp_add_salle(request,id):
    # ROLE
    user = Enseignant.objects.get(email=request.user.email)
    # ON RECUPERE LES DETAILS DU PROGRAMME
    programme = EmploiDuTemps2.objects.get(id=id)

    try:
        validite = Validite.objects.filter(activated=True).last()
    except Validite.DoesNotExist:
        validite = None

    form = AddMultiSalleForm(instance=programme)
    if request.method == 'POST':
        form = AddMultiSalleForm(request.POST,instance=programme)
        if form.is_valid():
            form.save()
            messages.success(request,'Les salles ont bien été attribuées')
            return redirect('/enseignant/rp_add_salle/'+str(id)+'/')
        else:
            messages.error(request, 'Vérifiez ')

    context ={
        'user': user,
        'programme':programme,
        'form': form,
        'validite': validite,
    }
    return render(request,'respo_pedag/add_salle.html',context)

