
    hO                        d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ dedefdZd ZdedefdZdededefdZde	defdZdedededefdZdedefdZd Zd Z d  Z!y)!    N)func)Session)	EmojiType)CodeScan)Notification)Role)User)SessionLocal)	messagingbase64_data	file_pathc                     t        j                  |       }t        |d      5 }|j                  |       d d d        y # 1 sw Y   y xY w)Nwb)base64	b64decodeopenwrite)r   r   	file_datafs       @/home/www/lekema-backend.kofcorporation.com/app/utils/helpers.pydecode_base64_filer      s?      -I	i	 !		  s	   =Ac                  N    dj                  t        j                  dd            S )N 
0123456789   k)joinrandomchoices     r   generate_otpr#      s    776>>,!455r"   nreturnc                 R    ddj                  fdt        |       D              }|S )Nr   r   c              3   H   K   | ]  }t        j                          y w)N)r   choice).0_
characterss     r   	<genexpr>z!get_random_int.<locals>.<genexpr>   s     H!FMM*5Hs   ")r   range)r$   random_stringr+   s     @r   get_random_intr/      s&    JGGHuQxHHMr"   namecountry_codec                 ~   dj                  | j                               }t        | j                  dd            dk  r-|d t        | j                  dd             j	                         }n|d d j	                         }dj                  t        j                  t        j                  d            }d| d| d| }|S )Nr       r   zLEKEMA--)	r   splitlenreplaceupperr   r    stringdigits)r0   r1   
clean_nameprefixrandom_numbercodes         r   generate_qr_coder@   !   s    &J
4<<R !A%7Sc2!678>>@BQ%%'GGFNN6==A>?M\N!F81]O<DKr"   ratingc           
          t         j                  dt         j                  dt         j                  dt         j                  dt         j
                  di}|j                  | d      S )N         r4      )r   VERY_BADBADMEDIUMGOOD	VERY_GOODget)rA   mappings     r   rating_to_scorerN   /   sO    Aq!QG ;;vq!!r"   dbuser_idtitlecontentc                 p   t        |||t        j                  j                               }| j                  |       | j	                          | j                  t              j                  t        j                  |k(        j                         }|r%|j                  rt        |j                  ||       y y y )N)rP   rR   rQ   
created_at)r   datetimeutcnowaddcommitqueryr	   filteridfirstdevice_tokensend_push_notification_by_token)rO   rP   rQ   rR   notificationusers         r   create_notificationra   :   s    ZbZkZkZrZrZtuLFF<IIK88D>  G!34::<D!!'(9(95'J "tr"   
company_idc           	      F   t         j                   j                         }|t        j                  d      z
  }|t        j                  d      z
  }| j                  t	        j
                  t        t        j                                    j                  t        j                  |k(        j                         }|r|dk  rt        | |dd       | j                  t              j                  t        j                  |k(        j                  t        j                  j                               j!                         }|r\t        |j                        dv rEdt        |j                         d	}|j"                  r|d
|j"                   z  }t        | |d|       | j                  t              j                  t        j                  |k(  t        j                  |k\  t        j                  j%                  t&        j(                  t&        j*                  g            j-                         }| j                  t              j                  t        j                  |k(  t        j                  |k  t        j                  |t        j                  d      z
  k\  t        j                  j%                  t&        j(                  t&        j*                  g            j-                         }	|	dkD  r||	z  dkD  rt        | |dd       | j                  t              j                  t        j                  |k(        j                  t        j                  j                               j/                  d      j1                         }
|
r"t1        d |
D              rt        | |dd       y y y )N   days   g      @u%   ⚠️ Satisfaction globale en baisseuF   La satisfaction globale est en baisse ! Vérifiez vos retours clients.rC   rD   u,   Un client a donné une très mauvaise note (z / 5).z Commentaire : u   ⚠️ Score très faibler   g333333?u(   ⚠️ Augmentation des scores négatifsuM   Vous avez une augmentation des scores négatifs ! Vérifiez les commentaires.rF   c              3   J   K   | ]  }t        |j                        d v   yw)rh   N)rN   rA   )r)   scans     r   r,   z&check_notifications.<locals>.<genexpr>k   s     \tODKK8FB\s   !#u   ⚠️ Pic d'insatisfactionuC   Pic d'insatisfaction détecté ! 5 clients insatisfaits d'affilée.)rU   rV   	timedeltarY   r   avgrN   r   rA   rZ   rb   scalarra   order_byrT   descr\   commentin_r   rG   rH   countlimitall)rO   rb   now
past_month	past_week
avg_rating	last_scanmessagenegative_count_currentnegative_count_previouslast_5_scanss              r   check_notificationsr~   D   s   



"
"
$Cx))r22Jh((a00I $((?8??#CDELLXM`M`dnMnovvxJj3&B
,S V\ 	]
 "))(*=*=*KLUU  "$$)EG _Y%5%56&@@QZQaQaAb@ccij):):(;<<GB
,GQ  XXh/66z)8+>+>*+LY//?@ eg  !hhx077z)8+>+>+KzH,>,>B,GGGY//?@ eg	 
 "(>AX(X\_'_B
,V Yc 	d
 88H%,,X-@-@J-NOXX  "$$)E!HSSU \|\\B
,I Lb 	c ]|r"   c                  |   t               } t        j                  j                         t        j                  d      z
  }| j	                  t
              j                  t              j                  t        j                  dk(        j                  t
        j                  j                  | j	                  t        j                        j                  t        j                  |k\        j                                      j!                         }|D ]  }t#        | |j                  dd        | j%                          y )Nrg   re   
Entrepriseu   ⏳ Absence de notationuO   Aucun retour client depuis 7 jours. Encouragez vos clients à donner leur avis.)r
   rU   ru   rk   rY   r	   r   r   rZ   labelr[   rq   r   rb   rT   distinctrt   ra   close)rO   seven_days_agoinactive_companiescompanys       r   check_absence_of_ratingsr   p   s    	B&&**,x/A/Aq/IIN 		d	

l*	+	RXXh&9&9:$fX%8%8N%JK&hj* * 
+ 
  & oB

,Em	oo HHJr"   c                     	 t        j                  t        j                  ||      |       }t        j                  |      }t	        d|        y # t
        $ r}t	        d|        Y d }~y d }~ww xY w)NrQ   body)r_   tokenSuccessfully sent message: Error sending message: r   Messager   sendprint	Exception)r]   rQ   rz   responsees        r   r^   r^      ss    -##"// 
 >>'*+H:67 -'s+,,-   AA 	A3A..A3c                     	 t        j                  t        j                  ||      |       }t        j                  |      }t	        d|        y # t
        $ r}t	        d|        Y d }~y d }~ww xY w)Nr   )r_   topicr   r   r   )r   rQ   rz   r   r   s        r   send_push_notification_by_topicr      ss    -##"// 
 >>'*+H:67 -'s+,,-r   )"r   rU   r   r:   
sqlalchemyr   sqlalchemy.ormr   app.enums.emoji_typer   app.models.code_scanr   app.models.notificationr   app.models.roler   app.models.userr	   app.utils.databaser
   firebase_adminr   strr   r#   intr/   r@   rN   ra   r~   r   r^   r   r!   r"   r   <module>r      s         " * ) 0     + $C C 6c c 3 c c "I "# "KG Kc K# K K)cG )c )cX.--r"   