
    CzivD                         d Z ddlmZmZmZ ddlmZ ddlmZ ddl	m	Z	 dZ
d Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d  Z$d! Z%d" Z&d#S )$uf   
Service centralisé pour l'envoi des emails.
Tous les emails de l'application passent par ce module.
    )current_apprender_templateurl_for)Message)mail)datetimezMCyber Diagnosticc                 2   	 t          j                    j        |d<   t          |t	          | t
                    r| gn|           }t          d| dfi ||_        t          d| d          rt          d| dfi ||_	        nt          |j                  |_	        t          j        |           t          j                            d|  d|            dS # t           $ r2}t          j                            d	|  d| d
           Y d}~dS d}~ww xY w)uP  
    Envoie un email en utilisant un template HTML.
    
    Args:
        to (str ou list): Destinataire(s)
        subject (str): Sujet de l'email
        template (str): Nom du template (sans extension, ex: 'welcome')
        **kwargs: Variables à passer au template
    
    Returns:
        bool: True si envoyé, False sinon
    current_year)subject
recipientszemails/z.htmlz.txtu   📧 Email envoyé à : Tu   ❌ Erreur envoi email à )exc_infoNF)r   nowyearr   
isinstancestrr   html_template_existsbody_html_to_textr   sendr   loggerinfo	Exceptionerror)tor   templatekwargsmsges         9/var/www/html/MCyber-Diagnostic/services/email_service.py
send_emailr"      sZ   !)!4~ )"c22:tt
 
 
 ##<X#<#<#<GGGG 4h44455 	/&'?'?'?'?JJ6JJCHH$SX..CH 		# H H Hw H HIIIt     !Gb!G!GA!G!GRV WWWuuuuus   CC 
D$'DDc                 V    	 t           j                            |            dS #  Y dS xY w)u   Vérifie si un template existe.TF)r   	jinja_envget_template)template_names    r!   r   r   C   s3    **=999tuus   # (c                     ddl }|                    dd|           }|                    dd|          }|                    dd|          }|                    d	d|          }|                                S )
z#Conversion basique HTML vers texte.r   Nz	<br\s*/?>
z</p>z

z<[^>]+> z\n{3,})resubstrip)r   r*   texts      r!   r   r   L   sm    III66,d++D66'64((D66*b$''D66)VT**D::<<    c                 D    t          | j        dd| || j        pd          S )u   
    Email de bienvenue avec lien d'activation du mot de passe.
    Destinataire: Nouvel utilisateur créé par Admin/Manager/Distributeur
    Template: welcome.html
    z6Bienvenue sur MCyber Diagnostic - Activez votre comptewelcomeVotre entrepriser   r   r   user	reset_urlcompany_namer"   emailr5   r3   r4   s     r!   send_welcome_emailr9   Z   s8     :H&<*<   r.   c                 D    t          | j        dd| || j        pd          S )u   
    Email de validation de compte (après approbation admin).
    Destinataire: Compte créé par un Distributeur et validé par l'Admin
    Template: account_validated.html
    u2   ✅ Votre compte MCyber Diagnostic a été validéaccount_validatedr1   r2   r6   r8   s     r!   send_account_validated_emailr<   j   s8     :D$&<*<   r.   c                 D    t          | j        dd| || j        pd          S )u   
    Email informant que le compte est en attente de validation.
    Destinataire: Compte créé par un Distributeur (avant validation admin)
    Template: pending_account.html
    u=   ⏳ Votre compte MCyber Diagnostic - En attente de validationpending_accountr1   )r   r   r   r3   distributor_namer5   r6   )r3   r?   s     r!   send_pending_account_emailr@   z   s8     :O")&<*<   r.   c                 6    t          | j        dd| ||          S )u   
    Email d'invitation à rejoindre une équipe (Manager ou Distributeur).
    Destinataire: Nouveau membre d'équipe
    Template: team_invitation.html
    u:   👥 Invitation à rejoindre l'équipe - MCyber Diagnosticteam_invitation)r   r   r   r3   r4   inviter_namer"   r7   )r3   r4   rC   s      r!   send_team_invitation_emailrE      s/     :L"!   r.   c                 4    t          | j        dd| |          S )u   
    Email de réinitialisation de mot de passe.
    Destinataire: Utilisateur ayant demandé un reset
    Template: password_reset.html
    u@   🔐 Réinitialisation de votre mot de passe - MCyber Diagnosticpassword_reset)r   r   r   r3   r4   rD   r8   s     r!   send_password_reset_emailrH      s,     :R!   r.   c                 J    t          | d|j        p|j         dd||          S )uV   
    Notification à l'admin qu'un compte a été créé.
    Destinataire: Admin
    u   📋 Nouveau compte créé: admin_notificationnew_account)r   r   r   notification_typenew_user
created_byr"   r5   r7   )admin_emailrM   rN   s      r!   #send_admin_new_account_notificationrQ      s?    
 Xx/D/VXX%'   r.   c                 N    t          | d|j         d|j         ddd||          S )u]   
    Notification à l'admin qu'un diagnostic a été réalisé.
    Destinataire: Admin
    u   📊 Nouveau diagnostic: z (z%)rJ   new_diagnosticr   r   r   rL   rapportr3   )r"   
nom_clientscore_total)rP   rU   r3   s      r!   &send_admin_new_diagnostic_notificationrX      sF    
 YG,>YY'BUYYY%*   r.   c                 J    t          | d|j        p|j         dd||          S )uY   
    Notification à l'admin qu'un compte attend validation.
    Destinataire: Admin
    u%   ⏳ Compte en attente de validation: rJ   pending_validation)r   r   r   rL   rM   distributorrO   )rP   rM   r[   s      r!   *send_admin_pending_validation_notificationr\      sA    
 a8M8_QYQ_aa%.   r.   c           
      T    t          | d| d|j        p|j         dd||||          S )uW   
    Alerte quota envoyée à l'admin pour un utilisateur.
    Destinataire: Admin
       ⚠️ Quota % pour rJ   quota_alertr   r   r   rL   r3   
percentageusedlimitrO   )rP   r3   rb   rc   rd   s        r!   send_quota_alert_to_adminre      sM    
 T
TT43D3R
TT%'	 	 	 	r.   c                 P    t          | d| d|j        p|j         dd||          S )uN   
    Alerte fin d'engagement envoyée à l'admin.
    Destinataire: Admin
       📅 Engagement J-r   rJ   engagement_alertr   r   r   rL   r3   	days_leftrO   )rP   r3   rj   s      r!   send_engagement_alert_to_adminrk      sG    
 SYSS$2C2QtzSS%,   r.   c                     dddddd}|                     |d          \  }}t          | | d|j        p|j         d	| d	|j        p|j         d
d|||||	  	        S )u   
    Notification à l'admin qu'un distributeur a effectué une action.
    Destinataire: Admin
    
    Args:
        action: 'suspended', 'reactivated', 'audit_blocked', 'audit_unblocked', 'deleted'
    )z
a suspendu   🔒)u   a réactivé   ✅)u   a bloqué les diagnostics de   ⛔)u   a réactivé les diagnostics dern   )u   a supprimé   🗑️	suspendedreactivatedaudit_blockedaudit_unblockeddeleted)u
   a modifié   📝z Action Distributeur :  rJ   distributor_action)	r   r   r   rL   r[   actionaction_labelaction_emojitarget_usergetr"   r5   r7   )rP   r[   rz   r}   action_labelslabelemojis          r!    send_distributor_action_to_adminr      s     ,.@E- M !$$V-CDDLE5  Y  Y1I1^[M^  Y  Yaf  Y  Yit  jB  jW  FQ  FW  Y  Y%.
 
 
 
r.   c                 H    t          | d|j        p|j         dd|          S )uk   
    Notification au distributeur qu'un de ses comptes a été validé.
    Destinataire: Distributeur
    u   ✅ Compte validé: distributor_notificationr;   )r   r   r   rL   validated_userrO   )distributor_emailr   s     r!   /send_distributor_account_validated_notificationr     s=    
 \~'B'ZnFZ\\+-%   r.   c           
      T    t          | d| d|j        p|j         dd||||          S )uf   
    Alerte quota envoyée au distributeur pour un de ses clients.
    Destinataire: Distributeur
    r^   r_   r   r`   ra   rO   )r   r3   rb   rc   rd   s        r!   send_quota_alert_to_distributorr   +  sM    
 T
TT43D3R
TT+'	 	 	 	r.   c                 P    t          | d| d|j        p|j         dd||          S )uZ   
    Alerte fin d'engagement envoyée au distributeur.
    Destinataire: Distributeur
    rg   r   r   rh   ri   rO   )r   r3   rj   s      r!   $send_engagement_alert_to_distributorr   <  sG    
 SYSS$2C2QtzSS+,   r.   c           
          ddddd}|                     |d          \  }}t          | | d|j        p|j         d| d	d
||||          S )z
    Confirmation au distributeur de l'action qu'il vient d'effectuer.
    Destinataire: Distributeur
    
    Args:
        action: 'suspended', 'reactivated', 'audit_blocked', 'audit_unblocked'
    suspendurm   u
   réactivérn   )u   bloqué les diagnostics pourro   )u   réactivé les diagnostics pourrn   )rr   rs   rt   ru   u   modifiérw   z Confirmation : Compte rx   r   action_confirmationr   r   r   rL   rz   r{   r|   r}   r~   r   rz   r}   r   r   r   s         r!   'send_action_confirmation_to_distributorr   K  s     *,@E	 M !$$V-ABBLE5hh1I1^[M^hhafhh+/	 	 	 	r.   c           
          dddddd}|                     |d          \  }}t          | | d|j        p|j         d	| d
d||||          S )z
    Notification au distributeur que l'admin a agi sur un de ses clients.
    Destinataire: Distributeur
    
    Args:
        action: 'suspended', 'reactivated', 'audit_blocked', 'audit_unblocked', 'deleted'
    r   r   )u   bloqué les diagnostics dero   )u   réactivé les diagnostics dern   )u	   supprimérp   rq   r   z! Action Admin sur votre client : rx   r   admin_actionr   r~   r   s         r!    send_admin_action_to_distributorr   h  s     *,>C+ M !$$V-ABBLE5rr;;S;hWbWhrrkprr+(	 	 	 	r.   c                 H    t          | d|j        p|j         dd|          S )uZ   
    Confirmation au manager qu'il a créé un utilisateur.
    Destinataire: Manager
    u   ✅ Utilisateur créé: manager_notificationrM   )r   r   r   rL   rM   rO   )manager_emailrM   s     r!   "send_manager_new_user_confirmationr     s<    
 T8+@+RHNTT'$   r.   c                 J    t          | d|j        p|j         dd||          S )zk
    Notification au manager qu'un de ses utilisateurs a fait un diagnostic.
    Destinataire: Manager
    u   📊 Nouveau diagnostic de r   
diagnosticrT   rO   )r   rU   r3   s      r!   $send_manager_diagnostic_notificationr     s?    
 Od.?.M4:OO'&   r.   c           	      @    t          | j        d| dd| |||          S )uJ   
    Alerte quota à 80%.
    Destinataire: User ou Manager concerné
    u   ⚠️ Quota à z% - MCyber Diagnosticr`   r   r   r   r3   rb   rc   rd   rD   )r3   rb   rc   rd   s       r!   send_quota_warning_emailr     s=    
 :D:DDD   r.   c           	      8    t          | j        dd| d||          S )uR   
    Alerte quota atteint (100%).
    Destinataire: User ou Manager concerné
    u.   🚨 Quota mensuel atteint - MCyber Diagnosticr`   d   r   rD   )r3   rc   rd   s      r!   send_quota_critical_emailr     s2    
 :@   r.   c                 T    |dk    rdnd}t          | j        | d| dd| |          S )u\   
    Rappel fin d'engagement (J-30 ou J-7).
    Destinataire: User ou Manager concerné
       u   🔴u   🟠z Fin d'engagement dans z jours - MCyber Diagnosticengagement_reminder)r   r   r   r3   rj   rD   )r3   rj   urgencys      r!   send_engagement_reminder_emailr     sN    
 "QffFG:XX9XXX&   r.   c           	      8    t          | j        ddd| ||          S )u   
    Email informant l'utilisateur que son compte a été suspendu.
    Destinataire: Compte suspendu (Manager/User/Distributeur)
    u4   🔒 Votre compte MCyber Diagnostic a été suspenduaccount_statusrr   )r   r   r   rz   r3   suspended_by_namesuspended_by_rolerD   )r3   r   r   s      r!   send_account_suspended_emailr     s2    
 :F!++   r.   c           	      8    t          | j        ddd| ||          S )u   
    Email informant l'utilisateur que son compte a été réactivé.
    Destinataire: Compte réactivé (Manager/User/Distributeur)
    u5   ✅ Votre compte MCyber Diagnostic a été réactivér   rs   )r   r   r   rz   r3   reactivated_by_namereactivated_by_rolerD   )r3   r   r   s      r!   send_account_reactivated_emailr     s2    
 :G!//   r.   c           	      8    t          | j        ddd| ||          S )u   
    Email informant l'utilisateur que la création d'audits a été bloquée.
    Destinataire: Compte concerné (Manager/User)
    u6   ⛔ Création de diagnostics bloquée sur votre compter   rt   )r   r   r   rz   r3   blocked_by_nameblocked_by_rolerD   )r3   r   r   s      r!   send_audit_blocked_emailr     s2    
 :H!''   r.   c           	      8    t          | j        ddd| ||          S )u   
    Email informant l'utilisateur que la création d'audits a été réactivée.
    Destinataire: Compte concerné (Manager/User)
    u9   ✅ Création de diagnostics réactivée sur votre compter   ru   )r   r   r   rz   r3   unblocked_by_nameunblocked_by_rolerD   )r3   r   r   s      r!   send_audit_unblocked_emailr     s2    
 :K! ++   r.   N)'__doc__flaskr   r   r   
flask_mailr   
extensionsr   r   DEFAULT_SENDER_NAMEr"   r   r   r9   r<   r@   rE   rH   rQ   rX   r\   re   rk   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r.   r!   <module>r      s   
 8 7 7 7 7 7 7 7 7 7                   * ( ( (V                  &        "    F    "    :  D    &     (  &             r.   