
    4?i!              
       Z   S SK r S SKJrJr  S SK7  S SK7  S SKJr  S SKJ	r	  S SK
JrJrJrJr  S SKJrJr  S SK7  S SK7  \" SS	/S
9r\R-                  S5      \ l        \R1                  S5      \" \5      \" SSS9\" S S S94S\	S\S\4S jj5       r\R7                  S\S9\" \5      4S\S\	4S jj5       r\R7                  S\S9\" \5      4S\S\	4S jj5       r \R1                  S\S9\" \5      4S\S\	4S jj5       r!\RE                  S5      \" \5      4S\S\#S\	4S jj5       r$\R7                  S5      \" \5      4S \%S\	4S! jj5       r&\R7                  S"5      \" \5      4S \'S\	4S# jj5       r(\R1                  S$5      \" \5      \" SSS9\" S S S94S\S\	S\S\4S% jj5       r)g)&    N)selectjoin)*)get_db)AsyncSession)	APIRouterDependsHTTPExceptionQuery)register_agentlogin_agentz/agentsAgents)prefixtagsRESEND_API_KEY/
      )gedblimitoffsetc           	      p  #    U R                  [        [        R                  [        R
                  5      5      5      I S h  vN nUR                  5       =(       d    SnU R                  [        [        R
                  [        R                  [        R                  [        R                  [        R                  5      R                  U5      R                  U5      5      I S h  vN nUR                  5       nU Vs/ s H  nUS   US   US   US   US   S.PM     nnUUUUX!-   U:  S.$  N NJs  snf 7f)Nr   r            )idnameemail	is_onlinelast_seen_at)agentstotalr   r   has_more)executer   funccountAgentr   scalarr   r   r    r!   r   r   all)	r   r   r   total_resultr#   resultrowsrr"   s	            3/var/www/html/livechat/backend/app/routers/agent.py
get_agentsr0      s     F4::ehh+?$@AAL!&QE ::HHJJKKOO	
 
u	
 
F ::<D 	 A A$aDqT1aD	
   	 NU* ; B
	s6   ?D6D-B"D6$D/%D6=!D1D6/D61D6z	/register)response_modeldatac                    #     [        X5      I S h  vN nU$  N! [         a  n[        S[        U5      S9eS nAff = f7f)N  status_codedetail)r   
ValueErrorr
   str)r2   r   agentes       r/   register_agent_apir<   G   sA     <$R.. / <CF;;<s+   A   A  
=8=A z/loginc                 Z   #    [        X5      I S h  vN nU(       d
  [        SSS9eU$  N7f)Ni  zInvalid credentialsr5   )r   r
   )r2   r   r:   s      r/   login_agent_apir>   P   s-     b''E4IJJL (s   +)+z/me/{agent_id}agent_idc                    #    UR                  [        [        5      R                  [        R                  U :H  5      5      I S h  vN nUR                  5       nU(       d
  [        SSS9eU$  N'7f)N  Agent not foundr5   )r%   r   r(   wherer   scalar_one_or_noner
   )r?   r   r,   r:   s       r/   get_agent_merE   X   sX     ::fUm11%((h2FGHHF%%'E4EFFL	 Is   AA.A,(A.z/update/{agent_id}c                 0  #    UR                  [        [        5      R                  [        R                  U :H  5      5      I S h  vN nUR                  5       nU(       d
  [        SSS9eSnUR                  (       a-  UR                  UR                  :w  a  UR                  Ul        SnUR                  (       d  UR                  (       ac  UR                  (       a  UR                  (       d
  [        SSS9eUR                  UR                  :w  a
  [        SSS9eUR                  Ul
        SnU(       d  S	S
0$ UR                  5       I S h  vN   UR                  U5      I S h  vN   UR                  UR                  UR                  S.$  GNK ND N-7f)NrA   rB   r5   FTr4   z3Both current_password and new_password are requiredzCurrent password incorrectmessagezNo changes applied)r   r   r   )r%   r   r(   rC   r   rD   r
   r   current_passwordnew_passwordpassword_hashcommitrefreshr   )r?   r2   r   r,   r:   updateds         r/   update_agentrN   c   sM     ::fUm11%((h2FGHHF%%'E4EFFG yyTYY%**,YY
  1 1 $$D,=,=L 
   E$7$77C8TUU"///00
))+
**U
 hh

 G I@ s7   AFFDFFF&F')FFFz/forgot-passwordpayloadc           
      4  #    [        [        5      R                  [        R                  U R                  :H  5      nUR	                  U5      I S h  vN nUR                  5       nU(       d
  [        SSS9e[        UR                  5      nU R                   SU 3n [        R                  R                  SUR                  SSUR                   SU S	3S
.5      n[        SU5        SUUS.$  N! [         a  n[        SS[!        U5       3S9eS nAff = f7f)NrA   zPlease Provide Valid Email IDr5   z/reset-password?token=zonboarding@resend.devzReset Your Passwordz
                <p>Hello zk,</p>
                <p>You requested a password reset. Click below link:</p>
                <p><a href="z|" target="_blank">Reset Password</a></p>
                <p>If you did not request this, ignore this email.</p>
            )fromtosubjecthtmlz >>>email>>> i  zEmail sending failed: z!Password reset link sent to email)rG   reset_token
reset_link)r   r(   rC   r   r%   rD   r
   create_reset_tokenr   frontend_urlresendEmailssendr   print	Exceptionr9   )	rO   r   stmtr,   r:   rU   rV   r   r;   s	            r/   forgot_passwordr_      s$     %=u{{gmm;<D::d##F%%'E4STT %UXX.K (())?}MJW""+++,** &'L )	
$
 
 	ou% 7"  A $:  W6LSQRVH4UVVWs8   ADC.ADAC0 (D0
D:DDDz/reset-passwordc                   #    [        U R                  5      nU(       d
  [        SSS9e[        [        5      R                  [        R                  U:H  5      nUR                  U5      I S h  vN nUR                  5       nU(       d
  [        SSS9eU R                  Ul
        UR                  5       I S h  vN   SS0$  NR N
7f)Nr4   zInvalid or expired tokenr5   rA   rB   rG   zPassword reset successfully)verify_reset_tokentokenr
   r   r(   rC   r   r%   rD   rI   rJ   rK   )rO   r   r?   r^   r,   r:   s         r/   reset_passwordrc      s      "'--0H4NOO %=uxx834D::d##F%%'E4EFF "..E
))+455 $ s%   A*C,B?-A	C6C7	CCz/assignments/{agent_id}c                   #    [        [        R                  [        R                  [        R                  R                  S5      [        R                  R                  S5      [        R                  [        R                  5      R                  [        [        R                  [        R                  :H  5      R                  [        R                  U :H  5      R                  [        R                  R                  5       5      R                  U5      R                  U5      nUR                  U5      I S h  vN nUR!                  5        Vs/ s H  n[#        UR$                  5      PM     nn[        [&        R)                  5       5      R+                  [        5      R                  [        R                  U :H  5      nUR                  U5      I S h  vN R-                  5       n	UU	S.$  Ns  snf  N7f)N
visitor_idvisitor_name)assignmentsr#   )r   AgentAssignmentHistoryr   r?   Visitorlabelre   
started_atended_atr   rC   order_bydescr   r   r%   fetchalldict_mappingr&   r'   select_fromr)   )
r?   r   r   r   queryr,   rowrg   count_queryr#   s
             r/   get_agent_assignment_historyrv      si     	"%%"++JJ\*$$^4"--"++	
 
g-88GJJF	G	%..(:	;	(3388:	;	u	 
  ::e$$F171BC1B#4%1BKC &223IJPP''83K ::k**224E #  %C +s1   D3G25G)6G2G++A&G2G0G2+G2)*rY   
sqlalchemyr   r   app.models.agentapp.models.visitorapp.core.databaser   sqlalchemy.ext.asyncior   fastapir   r	   r
   r   app.services.agentr   r   app.schemas.agentapp.utils.utilrouterosgetenvapi_keygetintr0   postAgentOutAgentCreater<   
AgentLoginr>   rE   putAgentUpdaterN   ForgotPasswordRequestr_   ResetPasswordRequestrc   rv        r/   <module>r      sC    #    $ / < < :  	)8*	5
 +,
 Cvraa.*** * *\ [2DKFO <K <\ < 3< Xh/@G    0 X6:A&/ # <  7  !MTU[_ *# *[ *l * "*`  MTU[_ '#8 'l ' !'Z  v6!66  6t %& vraa.	### # 	# '#r   