from pymongo import MongoClient
from datetime import datetime


class EvaluationDao:
    client = MongoClient('localhost', 27017)

    ## extraction d'une base de données. Si elle n'existe pas, elle esst créée
    base_donnees = client.squelette

    ## Création d'une nouvelle évaluation
    # @param contenus tableau avec les id des contenus associés à cette évaluation
    # @param auteur l'auteur qui créée l'évaluation
    def creer_evaluation(self, contenus, auteur):

        # création de l'évaluation
        max_id_eval = self.base_donnees.get_max_id_evaluations()
        if max_id_eval is None:
            max_id_eval = 0

        self.base_donnees.evaluation.insert_one(
            {"idEval": max_id_eval + 1, "date": datetime.now().strftime("%d/%m/%y"), "auteur": auteur,
             "contenu(s)": contenus})
        # on renseigne l'évaluation dans les contenus associés
        for i in contenus:
            self.base_donnees.contenu.update({"id": i}, {"$push": {"evals": max_id_eval + 1}})

    ## récupérer une ou plusieurs évaluations
    # @param auteur l'utilisateur souhaitant effectuer la récupération
    # @param id si non 0, l'id de l'évaluation à récupérer.
    # @return une évaluation ou toutes les évaluations de l'auteur
    @staticmethod
    def get_evaluations(self, auteur, id=0):
        if id == 0:
            return self.base_donnees.evaluation.find({"auteur": auteur})
        else:
            return self.base_donnees.evaluation.find({"auteur": auteur} and {"idEval": id})

    ## supprimer une évaluation
    # @param idEval l'id de l'évaluation à supprimer
    @staticmethod
    def supprimer_evaluation(self, idEval):
        self.base_donnees.evaluation.delete_one({"idEval": idEval})

    ## récupérer l'id max des évaluations (sera supprimé et remplacé par les id mongo)
    # @return l'id max des conenus en cours
    @staticmethod
    def get_max_id_evaluations(self):
        ## Fonction permettant de récupérer l'id max présent en base (pour pouvoir incrémenter un nouveau contenu).
        element = self.base_donnees.evaluation.find().sort("idEval", -1).limit(1)

        for elt in element:
            # print("id : ", elt["id"])
            return int(elt["idEval"])