§
    eŠ›j>  ã                  ó‚   — d Z ddlmZ ddlZddlZddlmZ ddlZddlm	Z	  ej
        d¦  «        Z G d„ de	¦  «        ZdS )	zrHTTP Adapter for Zalo Bridge Service.
Encapsulates all external network calls to the Node.js Fastify Zalo Bridge.
é    )ÚannotationsN)ÚAny)ÚZaloGatewayPortzdscons.zalo_http_adapterc                  ó@   — e Zd ZdZddd„Z	 ddd„Zdd„Zdd„Zdd„ZdS )ÚZaloHttpAdapterz>Outbound secondary adapter connecting to Zalo Bridge via HTTP.úhttp://127.0.0.1:3081Úbridge_base_urlÚstrÚreturnÚNonec                ó:   — |                      d¦  «        | _        d S )Nú/)Úrstripr	   )Úselfr	   s     úTC:\Projects\DSCons\app\modules\zalo_crm\infrastructure\adapters\zalo_http_adapter.pyÚ__init__zZaloHttpAdapter.__init__   s   € Ø.×5Ò5°cÑ:Ô:ˆÔÐÐó    FÚ	target_idÚmessageÚis_groupÚboolúdict[str, Any]c              ƒ  óú  K  — | j         › d�}|||dœ}	 t          j        ¦   «         4 ƒd{V —†}|                     ||d¬¦  «        ƒ d{V —†}|j        dk    r&|                     ¦   «         cddd¦  «        ƒd{V —† S dd|j        › d	|j        › �d
œcddd¦  «        ƒd{V —† S # 1 ƒd{V —†swxY w Y   dS # t          $ r9}t           	                    d|› �¦  «         dt          |¦  «        d
œcY d}~S d}~ww xY w)z-Send message via Node.js Fastify Zalo Bridge.z/api/send-message)ÚuserIdr   ÚisGroupNç      $@)ÚjsonÚtimeoutéÈ   FzBridge returned status z: )ÚsuccessÚerrorz$Error sending Zalo reply to bridge: )r	   ÚhttpxÚAsyncClientÚpostÚstatus_coder   ÚtextÚ	ExceptionÚloggerr!   r
   )	r   r   r   r   ÚurlÚpayloadÚclientÚresponseÚexcs	            r   Úsend_messagezZaloHttpAdapter.send_message   s  è è € ð Ô%Ð8Ð8Ð8ˆØ&°7ÀxÐPÐPˆð	9ÝÔ(Ñ*Ô*ð ð ð ð ð ð ð ¨fØ!'§¢¨S°wÈ Ñ!MÔ!MÐMÐMÐMÐMÐMÐM�ØÔ'¨3Ò.Ð.Ø#Ÿ=š=™?œ?ðð ð ð ñ ô ð ð ð ð ð ð ð ð ð
  %Ø^°xÔ7KÐ^Ð^ÈxÌ}Ð^Ð^ðð ð	ð ð ð ñ ô ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð øøøð ð ð ð ð ð øõ ð 	9ð 	9ð 	9Ý�LŠLÐEÀÐEÐEÑFÔFÐFØ$­s°3©x¬xÐ8Ð8Ð8Ð8Ð8Ð8Ð8Ð8øøøøð	9øøøsL   ”B7 ­=B$Á*B7 Á=B$ÂB7 Â$
B.Â.B7 Â1B.Â2B7 Â7
C:Ã.C5Ã/C:Ã5C:c              ƒ  ó†  K  — | j         › d�}	 t          j        ¦   «         4 ƒd{V —†}|                     |d¬¦  «        ƒ d{V —†}|                     ¦   «         cddd¦  «        ƒd{V —† S # 1 ƒd{V —†swxY w Y   dS # t
          $ r8}t                               d|› �¦  «         dt          |¦  «        icY d}~S d}~ww xY w)z+Proxy QR Code fetch to Node.js Zalo Bridge.z/api/qrNr   ©r   zError fetching Zalo QR: r!   )	r	   r"   r#   Úgetr   r'   r(   Úwarningr
   ©r   r)   r+   r,   r-   s        r   Úget_qrzZaloHttpAdapter.get_qr+   st  è è € àÔ%Ð.Ð.Ð.ˆð	'ÝÔ(Ñ*Ô*ð 'ð 'ð 'ð 'ð 'ð 'ð '¨fØ!'§¢¨C¸ Ñ!>Ô!>Ð>Ð>Ð>Ð>Ð>Ð>�Ø—}’}‘”ð'ð 'ð 'ð 'ñ 'ô 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'øøøð 'ð 'ð 'ð 'ð 'ð 'øõ ð 	'ð 	'ð 	'Ý�NŠNÐ;°cÐ;Ð;Ñ<Ô<Ð<Ø�S ™XœXÐ&Ð&Ð&Ð&Ð&Ð&Ð&øøøøð	'øøøs@   ŽA> §1A+ÁA> Á+
A5Á5A> Á8A5Á9A> Á>
C Â-B;Â5C Â;C c              ƒ  óˆ  K  — | j         › d�}	 t          j        ¦   «         4 ƒd{V —†}|                     |d¬¦  «        ƒ d{V —†}|                     ¦   «         cddd¦  «        ƒd{V —† S # 1 ƒd{V —†swxY w Y   dS # t
          $ r9}t                               d|› �¦  «         dt          |¦  «        dœcY d}~S d}~ww xY w)z*Proxy status check to Node.js Zalo Bridge.z/api/statusNg      @r0   zError checking Zalo status: F)ÚloggedInr!   )	r	   r"   r#   r1   r   r'   r(   Údebugr
   r3   s        r   Ú
get_statuszZaloHttpAdapter.get_status6   sw  è è € àÔ%Ð2Ð2Ð2ˆð	:ÝÔ(Ñ*Ô*ð 'ð 'ð 'ð 'ð 'ð 'ð '¨fØ!'§¢¨C¸ Ñ!=Ô!=Ð=Ð=Ð=Ð=Ð=Ð=�Ø—}’}‘”ð'ð 'ð 'ð 'ñ 'ô 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'øøøð 'ð 'ð 'ð 'ð 'ð 'øõ ð 	:ð 	:ð 	:Ý�LŠLÐ=¸Ð=Ð=Ñ>Ô>Ð>Ø %µ°C±´Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9øøøøð	:øøøs@   ŽA> §1A+ÁA> Á+
A5Á5A> Á8A5Á9A> Á>
CÂ.B<Â6CÂ<Cú1tuple[list[dict[str, Any]], list[dict[str, Any]]]c              ƒ  ó"  K  — | j         › d�}| j         › d�}	 t          j        ¦   «         4 ƒd{V —†}t          j        |                     |d¬¦  «        |                     |d¬¦  «        d¬¦  «        ƒ d{V —†\  }}g }t          |t          ¦  «        sCt          |d¦  «        r3|j	        d	k    r(| 
                    ¦   «                              d
g ¦  «        }g }t          |t          ¦  «        sCt          |d¦  «        r3|j	        d	k    r(| 
                    ¦   «                              dg ¦  «        }||fcddd¦  «        ƒd{V —† S # 1 ƒd{V —†swxY w Y   dS # t          $ r+}t                               d|› �¦  «         g g fcY d}~S d}~ww xY w)z<Fetch friends and group lists from Zalo Bridge concurrently.z/api/friendsz/api/groupsNr   r0   T)Úreturn_exceptionsr%   r   ÚfriendsÚgroupsz#Error fetching friends and groups: )r	   r"   r#   ÚasyncioÚgatherr1   Ú
isinstancer'   Úhasattrr%   r   r(   r!   )	r   Úfriends_urlÚ
groups_urlr+   Úfriends_respÚgroups_respr<   r=   r-   s	            r   Úget_friends_and_groupsz&ZaloHttpAdapter.get_friends_and_groupsA   sk  è è € ð Ô-Ð;Ð;Ð;ˆØÔ,Ð9Ð9Ð9ˆ
ð	ÝÔ(Ñ*Ô*ð 'ð 'ð 'ð 'ð 'ð 'ð '¨fÝ29´.Ø—J’J˜{°D�JÑ9Ô9Ø—J’J˜z°4�JÑ8Ô8Ø&*ð3ñ 3ô 3ð -ð -ð -ð -ð -ð -Ñ)�˜kð 13�å" <µÑ;Ô;ðEå ¨mÑ<Ô<ðEð %Ô0°CÒ7Ð7à*×/Ò/Ñ1Ô1×5Ò5°iÀÑDÔD�Gà/1�å" ;µ	Ñ:Ô:ðBå ¨]Ñ;Ô;ðBð $Ô/°3Ò6Ð6à(×-Ò-Ñ/Ô/×3Ò3°H¸bÑAÔA�Fà �ð/'ð 'ð 'ð 'ñ 'ô 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'øøøð 'ð 'ð 'ð 'ð 'ð 'øõ0 ð 	ð 	ð 	Ý�LŠLÐD¸sÐDÐDÑEÔEÐEØ�r�6ˆMˆMˆMˆMˆMˆMøøøøð	øøøsA   ˜E ±DEÄ3E Å
EÅE ÅEÅE Å
FÅ# F	ÆFÆ	FN)r   )r	   r
   r   r   )F)r   r
   r   r
   r   r   r   r   )r   r   )r   r9   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r.   r4   r8   rF   © r   r   r   r      sŽ   € € € € € ØHÐHð;ð ;ð ;ð ;ð ;ð >Cð9ð 9ð 9ð 9ð 9ð&	'ð 	'ð 	'ð 	'ð	:ð 	:ð 	:ð 	:ð"ð "ð "ð "ð "ð "r   r   )rJ   Ú
__future__r   r>   ÚloggingÚtypingr   r"   Ú3app.modules.zalo_crm.domain.ports.zalo_gateway_portr   Ú	getLoggerr(   r   rK   r   r   ú<module>rQ      s³   ððð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø Ð Ð Ð Ð Ð à €€€à OÐ OÐ OÐ OÐ OÐ Oà	ˆÔ	Ð5Ñ	6Ô	6€ðQð Qð Qð Qð Q�oñ Qô Qð Qð Qð Qr   