# coding: utf8
class mailService(object):
    
    # configuration d'envoi de mails
    @staticmethod
    def settingMail():
        from gluon.tools import Mail
        mail = Mail()
        mail = auth.settings.mailer
        mail.settings.server = 'smtp.gmail.com:587'
        mail.settings.sender = 'VOTREADRESSEMAIL@gmail.com'
        mail.settings.login = 'VOTREADRESSEMAIL@gmail.com:VOTREPASSWORD'
        return mail
    
    # méthode qui permet d'envoyer des mails à chaque changement d'état de dossier et à chaque modification de commentaire 
    @staticmethod
    def sendMail(idDossier, etatAvantUpdate,request):
        
        # obtention du dossier, demandeur et porteur du dossier
        dossier = projetService.getDossierById(idDossier)
        demandeur = userService.getInfosUser(dossier.user_id)
        porteur = porteurService.getPorteurById(dossier.porteur_id)
        
        msgDemandeur = None
        msgResponsable = None
        msgPresident = None

        sujet=''
        
        finDePhrase = '\n\nLe numéro du dossier est le suivant : '+ str(dossier.id)+'.\nLe lien de la demande est le suivant : '+ str(request.env.http_host+"/"+request.application+"/projet/addProjet/")+''+'idDossier='+str(dossier.id)+'.'
        
        # on teste si l'état avant le update du dossier est différent de l'état du dossier après l'update : si oui, il y a bien
        # eu changement d'état, donc on va procéder aux notifications de mail
        if(etatAvantUpdate != dossier.etat_dossier_id):
            
            # cas d'un dossier soumis
            if (dossier.etat_dossier_id == Constantes.SOUMIS):
                
                sujet = 'Soumission d\'une nouvelle demande'
                
                # Message aux demandeur et porteur
                msgDemandeur = 'Bonjour \n\n  '+demandeur.first_name+' '+demandeur.last_name +'.\n\nVotre demande a bien été soumise. \n\nElle est actuellement en cours de traitement.'+finDePhrase
                # Message aux représentant et au gestionnaire
                msgResponsable = 'Bonjour, \n\n Une demande a été soumise.'+finDePhrase
                # Message au président
                msgPresident = 'Bonjour, \n\n Une demande a été soumise.'+finDePhrase
            
            # cas d'un dossier accepté
            if (dossier.etat_dossier_id == Constantes.ACCEPTE):
                
                sujet = 'Dossier accepté'
                
                # Message aux demandeur et porteur
                msgDemandeur = 'Bonjour '+demandeur.first_name+' '+demandeur.last_name +'.\n\nLe dossier n°'+ str(dossier.id)+' a été acceptée.'+finDePhrase
                # Message aux représentant et au gestionnaire
                msgResponsable = 'Bonjour, \n\Le dossier n°'+ str(dossier.id)+' a été acceptée.'+finDePhrase
                # Message au président
                msgPresident = 'Bonjour, \n\Le dossier n°'+ str(dossier.id)+' a été acceptée.'+finDePhrase
               
             # cas d'un dossier refusé   
            if (dossier.etat_dossier_id == Constantes.REFUSE):
                
                sujet = 'Dossier refusée'
                
                # Message aux demandeur et porteur
                msgDemandeur = 'Bonjour '+demandeur.first_name+' '+demandeur.last_name +'.\n\nLe dossier n°'+ str(dossier.id)+' a été refusé.'+finDePhrase
                # Message aux représentant et au gestionnaire
                msgResponsable = 'Bonjour, \n\nLe dossier n°'+ str(dossier.id)+' a été refusé.'+finDePhrase
                # Message au président
                msgPresident = 'Bonjour, \n\nLe dossier n°'+ str(dossier.id)+' a été refusé.'+finDePhrase
             
            # cas d'un dossier en attente   
            if (dossier.etat_dossier_id == Constantes.ATTENTE):
                
                sujet = 'Dossier en attente'
                
                # Message aux demandeur et porteur
                msgDemandeur = 'Bonjour '+demandeur.first_name+' '+demandeur.last_name +'.\n\nLe dossier n°'+ str(dossier.id)+' a été mis en attente.'+finDePhrase
                # Message aux représentant et au gestionnaire
                msgResponsable = 'Bonjour, \n\Le dossier n°'+ str(dossier.id)+' a été mis en attente.'+finDePhrase
                # Message au président
                msgPresident = 'Bonjour, \n\Le dossier n°'+ str(dossier.id)+' a été mis en attente.'+finDePhrase

        # pas de changement d'état : on notifie d'une modification de commentaire du dossier
        else:
            
            sujet = 'Commentaire modifié d\'un dossier'
            
                            # Message aux demandeur et porteur
            msgDemandeur = 'Bonjour '+demandeur.first_name+' '+demandeur.last_name +'.\n\nLe commentaire de votre dossier n°'+ str(dossier.id)+' a été mis modifié.\n\n Voici le commentaire du dossier : \n\n'+dossier.commentaire+finDePhrase
            # Message aux représentant et au gestionnaire
            msgResponsable = 'Bonjour, \n\nLe commentaire du dossier n°'+ str(dossier.id)+' a été modifié.\n\nVoici le commentaire du dossier : \n\n'+dossier.commentaire+finDePhrase
            # Message au président
            msgPresident = 'Bonjour, \n\nLe commentaire du dossier n°'+ str(dossier.id)+' a été modifié.\n\nVoici le commentaire du dossier : \n\n'+dossier.commentaire+finDePhrase
        
        
        mailSender = mailService.settingMail()
         # Envoi des mails au demandeur
        mailSender.send(to=[demandeur.email], cc=[str(porteur.mail)], subject=sujet,message=msgDemandeur)
        #au responsable
        mailSender.send(to=[str(dossier.mailResponsable)], cc=[str(dossier.mailGestionnaire)], subject=sujet,message=msgResponsable)
        # et à tous les présidents
        for pres in userService.getPresidents():
              mailSender.send(to=[pres.email], subject=sujet,message=msgPresident)

    # envoi de mails lorqu'un nouvel utilisateur est créé
    @staticmethod
    def sendMailNewUser(prenom, nom, email,mdp):
        
        msgUser = 'Bonjour '+str(prenom)+' '+str(nom)+',\n\n Un compte a été créé dans le gestionnaire des dossiers CARI. Voici l\'URL : '+ str(request.env.http_host+'/'+request.application)+'.\n\n Votre identifiant est votre adresse mail et votre mot de passe est : '+ str(mdp)+' Il faudra modifier votre mot de passe lors de votre première connexion.'

        mailSender = mailService.settingMail()
        mailSender.send(to=[email], subject='Création de votre compte CARI',message=msgUser)
