
    4?iR                     d   S SK JrJrJr  S SKJr  S SKJr  S SKJ	r	  S SK
Jr  S SKJrJrJr  S SKJrJr  S SKJr  \" 5       rS S	K JrJrJrJr  S SKJr  S SKJr  S SKJ	r	  S S
KJrJrJr  S SKJr  S SKJr  S SKJrJr  S SK
Jr  \" 5       r\R;                  S5      \" \	5      4S\S\4S jj5       rg)    )	APIRouter	WebSocketWebSocketDisconnect)AsyncSession)select)get_db)ChatService)assign_agent_to_visitorrelease_assignmentget_active_assignment)visitor_manageradmin_manager)Visitor)r   r   r   Depends)r   r   agent_manager)Client)AgentAgentAssignmentHistoryz	/ws/admin	websocketdbc                   #    U R                  5       I S h  vN   [        R                  " U 5        [        S5         [	        [
        R                  R                  5       5      n/ nU(       Ga  UR                  [        [        [        5      R                  [        [        R                  [        R                  :H  5      R                  [        R                   R#                  U5      5      5      I S h  vN nUR%                  5       nU VVs/ s H  u  pgUR                  PM     nnnUR                  [        [&        5      R                  [&        R                   R#                  U5      [&        R(                  R+                  S 5      5      5      I S h  vN n	U	R-                  5       R%                  5       n
U
 Vs0 s H  oR                   U_M     nnU H  u  pmUR/                  UR                  5      nUR1                  UR                   UR2                  UR                  UR4                  UR6                  UR8                  UR:                  U(       a  UR<                  OS U(       a  UR>                  OS S.	5        M     [	        [@        R                  R                  5       5      n/ nU(       a  UR                  [        [B        5      R                  [B        R                  R#                  U5      5      5      I S h  vN nUR-                  5       R%                  5        H6  nUR1                  UR                  UR2                  URD                  S.5        M8     U RG                  SUUS.5      I S h  vN    U RI                  5       I S h  vN nUR/                  S5      nUS:X  a  UR/                  S5      nUR/                  S	S
5      nUR/                  S[K        U5      5      n[
        R.                  " U5      nU(       a  URG                  SSUUS.5      I S h  vN   [        RL                  " SSUUUS.5      I S h  vN   GOUS:X  Ga  UR/                  S5      nUR/                  S	5      =(       d    S
RO                  5       nUR/                  S5      nU(       a  U(       d  GM1  [Q        U5      nURS                  UUS9I S h  vN nURU                  UR                  UR                  SUS9I S h  vN   [
        R.                  " U5      nU(       a  URG                  SUS.5      I S h  vN   [        RL                  " SUUS.5      I S h  vN   GM   GN@ GNfs  snnf  GNs  snf  GNn GN GN GNY GN8 N N NP N0! [V         a    [        S5         O"[X         a  n[        SU5         S nAOS nAff = f[        RZ                  " U 5        g ! [        RZ                  " U 5        f = f7f)NzAdmin connected)	visitor_uidname	client_idcitycountryregion
ip_addressclient_nameassigned_agent_id)idr   emailinitial_state)typeagentsvisitorsr$   typingtotext isTypingadmin)r$   fromr)   r+   )r$   r-   r   r)   r+   admin_message	widget_id)r/   r   )r   
visitor_idsenderr)   )r$   r)   )r$   r   r)   zAdmin disconnectedzAdmin WS error:).acceptr   connectprintlistr   active_connectionskeysexecuter   r   r   joinr   r!   wherer0   in_allr   ended_atis_scalarsgetappendr   r   r   r   r   r   agent_idr   r   r"   	send_jsonreceive_jsonbool	broadcaststripr	   get_or_create_visitorsave_messager   	Exception
disconnect)r   r   visitor_uidsvisitors_payloadresrowsv_visitor_idsass_resassignmentsaass_mapc	agent_idsagents_payloaddatamsg_typer   r)   	is_typingwsr/   servicevisitorv_wses                              ./var/www/html/livechat/backend/app/ws/admin.pyadmin_wsrc     s    
 


)$	
S,
 O>>CCEF

w'fg//699<=w))--l;< C
 779D.23dFQ144dK3 JJ-.44*5599+F*3377= G "//+//1K0;<1||QG<KK% '''(|| !%&[[ !#$99"#((&'ll89q}}t;<QZZ$
 " 99>>@A	

6%=#6#6uxx||I7N#OPPC[[]&&(%%dd !!" ) !!'(,
 	
 	
 "//11Dxx'H 8#"hhtnxx+ HHZd<	$((5,,$,$+$((1	   $-- ( ''2 $$-   _,"hhtn(.B557 HH[1	"$ &b/ ' = =' + !> ! 
 **%//&zz"	 +    '**;7..$3$(   $-- /'2 $  E Q  4 =, Q	
 2*
  $"# $##$ 	  +  +s:  W,U%W,B6V 3U4V U%A.V U"&V :U%D,V <U*=A4V 1U-2V 
U0BV U3#V >U6?BV U9-V 3U;48V ,U=-!V U?V W,V V %V -V 0V 3V 6V 9V ;V =V ?V V7W 	V7!V2-W 2V77W :W,W))W,N)fastapir   r   r   sqlalchemy.ext.asyncior   
sqlalchemyr   app.core.databaser   app.services.chatr	   app.services.agentr
   r   r   app.ws.connection_managerr   r   app.models.visitorr   routerr   r   app.models.clientr   app.models.agentr   r   r   rc        rb   <module>rq      s   l > = /  $ ) a a D &	r G F /  $ S S & $ : )	+ v[,[,[, [,rp   