
    Ji                     l    d dl Z d dlmZmZmZ d dlmZmZ d dlm	Z	 d dl
mZ  e	       Z G d de      Zy)    N)retrystop_after_attemptwait_exponential)NotificationChannelDeliveryResult)get_settings)get_vk_tokenc                   r    e Zd ZdZedefd       Z e ed       e	ddd      	      d
edede
fd       Zy)	VKAdapterz(VK Messages API adapter with retry logicreturnc                      y)Nvk )selfs    )/var/www/notifications/app/channels/vk.pychannel_namezVKAdapter.channel_name   s                 
   )
multiplierminmax)stopwaittargetcontentc                   K   |j                  d      }|st        dd      S t        |       d{   }|st        dd      S d}|||j                  dd	      |d
d}	 t        j                  d      4 d{   }|j                  ||       d{   }	|	j                          |	j                         }
d|
v rw|
d   j                  d      }|
d   j                  dd      }|dk(  r%t        j                  d| |	j                  |	      t        dd| d|       cddd      d{    S d|
v r+t        dt        |
d         |
      cddd      d{    S t        dd      cddd      d{    S 7 Q7 7 7 Z7 -7 # 1 d{  7  sw Y   yxY w# t        j                  $ r#}t        ddt        |             cY d}~S d}~wt        $ r#}t        ddt        |             cY d}~S d}~ww xY ww)a  
        Send message via VK Messages API
        
        Args:
            target: vk_user_id (customer.vk_user_id)
            content: message text
            kwargs: tenant_id (required)
        
        API docs: https://dev.vk.com/method/messages.send
        	tenant_idFz$tenant_id is required for VK sending)successerrorNzANo VK group configured for this tenant. Add VK group in settings.z'https://api.vk.com/method/messages.send	random_idr   z5.131)user_idmessager#   access_tokenvg      >@)timeout)paramsr"   
error_code	error_msgzUnknown VK error   zVK rate limit: )requestresponsezVK API error z: r.   T)r!   
message_idresponse_metazUnexpected VK response formatzHTTP error: zUnexpected error: )getr   r	   httpxAsyncClientpostraise_for_statusjsonHTTPStatusErrorr-   str	HTTPError	Exception)r   r   r   kwargsr    r&   urlr)   clientr.   datar*   r+   es                 r   sendzVKAdapter.send   s5     JJ{+	!<  *)44!Y 
 8K3(
,	((6    &!'S!@@))+}}d?!%g!2!2<!@J $W 1 1+?Q RI "Q#33-i[9$,$4$4%-  * % -j\I;G#     , %) $#&tJ'7#8&*/     : * %=;     # 5" @           D  	!$SVH-   	!*3q6(3 	s  /HF-H F% :F;F% >FFBF#F% /F
0F% 4H5FF% FF% #H$F0F% <F=F% HF% F
F% F% F% F"FF"F% !H"F% %H8GHHH"H :H;H HHN)__name__
__module____qualname____doc__propertyr8   r   r   r   r   r   r@   r   r   r   r   r   
   se    2c   "r:O Os O O	Or   r   )r2   tenacityr   r   r   app.channels.baser   r   app.core.configr   app.services.vk_senderr	   settingsr   r   r   r   <module>rK      s-     @ @ A ( />Z# Zr   