# -*- coding: utf-8 -*-

"""
 A executer apres s'etre place dans /opt/scodoc/Products/ScoDoc
 et en lancant l'interpreteur avec /opt/scodoc/bin/zopectl debug

 execfile("test_jurype.py")


@author: barasc
Juin 2017
"""
import pprint

from debug import *

import sco_utils
import sco_formsemestre
import sco_codes_parcours

import pe_tools

reload(pe_tools)  # inutile sauf en debug interactif
import pe_tagtable

reload(pe_tagtable)
import pe_semestretag

reload(pe_semestretag)
import pe_settag

reload(pe_settag)
import pe_jurype

reload(pe_jurype)
import codecs
import pe_avislatex

reload(pe_avislatex)

# ****************************************************************************
# Initialisations generales
# ****************************************************************************
context = go_dept(app, "RT")  # se place dans le departement RT
authuser = app.acl_users.getUserById("admin")
sems = (
    context.Notes.formsemestre_list()
)  # Renvoie la liste de tous les semestres de la BDD

qui = "emmanuel"
if qui == "cleo":
    fid = "SEM9045"  # Choix du semestre sur lequel sera fait le calcul du jury (ici promo 2016 avec tous les résultats)
    # fid = 'SEM14440' # Cas d'une promo dans laquelle manque au moins le S4
else:
    fid = "SEM27456"  # RT S3 jan 2016

print("Semestre=", fid)

if qui == "cleo":
    nom = "BRUN"  # Choix du nom de l'étudiant dont les résultats seront affichés sur la console
else:
    nom = "ROSSE"

# paramètres des avis Latex
REPERTOIRE_MODELES = "tmp/avis/modeles/"
REPERTOIRE_ECRITURE_AVIS = "tmp/avis/"

# class = "avisPE.cls"
# main = "avis.tex" # Fichier principal de compilation
modele = "un_avis.tex"  # Modele à actualiser au regard des résultats de l'étudiant

# *****************************************************************************
# Calcul du Jury PE
# *****************************************************************************
# semsDUT = [sem for sem in sems if 1 <= sem['semestre_id'] <= 4 ]
semBase = sco_formsemestre.get_formsemestre(fid)
jury = pe_jurype.JuryPE(context, semBase)


# *****************************************************************************
# Affichage des résultats (texte)
# *****************************************************************************
etudid = [
    etudid for etudid in jury.syntheseJury if jury.syntheseJury[etudid]["nom"] == nom
][0]
resEtudiant = jury.syntheseJury[etudid]  # Résultat de l'étudiant au jury PE

# Parcours
parcours = resEtudiant["parcours"][::-1]
print("Parcours de %s %s" % (resEtudiant["prenom"], resEtudiant["nom"]))
for (no, sem) in enumerate(parcours):
    print("  %d) %s" % (no + 1, sem))

# Bilan synthétique par semestre et par tag
for sem in ["S1", "S2", "S3", "S4", "1A", "2A", "3S", "4S"]:
    if sem in ["S1", "S2", "S3", "S4"]:
        print("Semestre %s" % (sem))
    elif sem in ["1A", "2A"]:
        print("Annee %s" % (sem))
    elif sem == "3S":
        print("Fusion S1/S2/S3")
    else:
        print("Fusion S1/S2/S3/S4")

    allTags = resEtudiant[sem]["groupe"].keys()
    allTags.extend(resEtudiant[sem]["promo"].keys())
    allTags = sorted(list(set(allTags)))  # tous les tags du groupe et de la promo

    restxt = ""
    for tag in allTags:
        chaine = "    * %20s\t" % (tag)

        for ensembleRes in [resEtudiant[sem]["groupe"], resEtudiant[sem]["promo"]]:
            if tag in ensembleRes:
                (note, coeff, classement, nb_inscrits, vmoy, vmax, vmin) = ensembleRes[
                    tag
                ]
                note = "%2.2f" % note if isinstance(note, float) else str(note)
                classement = "None" if classement == None else classement
                nb_inscrits = (
                    ("%d" % nb_inscrits)
                    if isinstance(nb_inscrits, int)
                    else str(nb_inscrits)
                )
                vmin = "%2.2f" % vmin if isinstance(vmin, float) else str(vmin)
                vmoy = "%2.2f" % vmoy if isinstance(vmoy, float) else str(vmoy)
                vmax = "%2.2f" % vmax if isinstance(vmax, float) else str(vmax)

                chaine += "%5s\t%5s/%2s\t%5s/%5s/%5s\t" % (
                    note,
                    classement,
                    nb_inscrits,
                    vmin,
                    vmoy,
                    vmax,
                )
            else:
                chaine += "miss.\t" * 3

        restxt += chaine + "\n"
    print(restxt)

# Sauvegarde du zip contenant les CSV:
filename = "/tmp/test_pe.zip"
print("Enregistrement du ZIP: ", filename)
f = open(filename, "w")
f.write(jury.get_zipped_data())
f.close()

# *****************************************************************************
# Genere l'avis latex
# *****************************************************************************
# Choix d'un modele d'avis PE


# Genere l'avis PE
print("Avis PE de %s (%s)" % (jury.syntheseJury[etudid]["nom"], etudid))
un_avis_latex = pe_avislatex.get_code_latex_from_modele(
    REPERTOIRE_MODELES + "un_avis.tex"
)
code_latex = pe_avislatex.get_code_latex_avis_etudiant(
    jury.syntheseJury[etudid], un_avis_latex
)

# Sauvegarde l'avis
fid = codecs.open(REPERTOIRE_ECRITURE_AVIS + modele, "w", encoding="utf-8")
fid.write(code_latex)
fid.close()
