U
    e}                     @   st   d dl Z d dlZd dlmZmZmZ d dlmZ d dlmZ d dl	T d dl
mZ d dlmZmZ G dd	 d	eZdS )
    N)datetimetimezonedate)Path)BeautifulSoup)*)CmfMessageMixin)before_requestcmf_contextc                       s   e Zd Zi Zeeje	j
dgZeed< ejf eZdd fdd
Z fddZd	d
 Zdd Zed fdd	Zdd ZdeedddZdddZdd Zdd Z  ZS )CmfWhatsappzmodules/voip/templatesloaderr   )depthc                   s   t  j|d|i|S )Nr   )supersave)selfr   argskwargs	__class__ $./modules/crm/models/cmf_whatsapp.pyr      s    zCmfWhatsapp.savec                    s    t t| j||}| d d S )NZwhatsapp_delete)r   r   deletesend_cmd)r   r   r   resr   r   r   r      s    zCmfWhatsapp.deletec                 C   s   |  d dS )um   
        Отправляем событие на отключение сессии
        :return:
        Zwhatsapp_disconnectNr   r   r   r   r   
disconnect   s    zCmfWhatsapp.disconnectc                 C   s$   |  dg | dd| jji d S )Nload_from_dateZwhatsapp_connect)Zload_fieldsr   r   Zjsonr   r   r   r   connect!   s    zCmfWhatsapp.connectNc                    s>   |dkr$|sg }|dddgg}dg}t  j|f||d|S )Nparentzstatus.status_typez!=ZCLOSEDZCmfPipeline)filtermodels_list)r   field_options_list)clsZrelation_field_namer    r!   r   r   r   r   r"   %   s    zCmfWhatsapp.field_options_listc                 C   s   |  d d S )NZwhatsapp_statusr   r   r   r   r   check_status.   s    zCmfWhatsapp.check_status)cmddatac                 C   s:   |d krt  }tj|d< | jj|d< t||dtd d d S )NZorg_nameZcrm_idz	/whatsapp)	namespaceZsocket_clientZroom)dictconfigZORG_NAMEidvalueZcmf_emit_eventZwhatsapp_sio)r   r%   r&   r   r   r   r   1   s
    
zCmfWhatsapp.send_cmdc              
   O   s  |sd S | d}d }t j|}t }	t|}
g }|
dD ](}d|jddkr>|t|dd q>|
dD ]}|t|d	d qr|rV|D ]}|d
 }|jd}t	
d|d }t jjdd|gdgd}t j|dd | |dd}t|jd}| }W 5 Q R X t| }||	d< tjd|dd  |	d< |d |	d< qn|
 }t j|| |dd}|r||_d|_||_|  |jj|	d< |jj|	d< |jj|	d< |jj|	d< |  d |	 |S )!Nz@s.whatsapp.netazcmf-fileclass file)objtypeimgimager0   srcz	/files/.*r   url==r   )r    Zfields/Zsending)textchannel	client_idmessage_statusrb.   	mime_typer1   outphonemessageZcrm_message_id
message_idZwhatsapp_message_send)!models	CmfPersonZget_by_phoner(   r   ZfindAllZattrsgetappendrefindallZCmfAttachmentCmfChannelMessagesplitopen	file_pathreadbase64Z	b64encodedecode	mimetypesZ	types_mapZget_textchat_messagemessage_flow	person_tor   r;   r+   r9   r*   rD   r   )r   Zphone_numberrC   rS   r   r   r;   channel_msgcontactparamsZsoupfilesr0   Z_fileZfull_urlZurl_pathZ
attachmentfr2   Z	plain_msgr   r   r   send_message9   s^    
     zCmfWhatsapp.send_messagec                 O   s  | j | jdd tjj |d | jd}|r.d S t|d }| | jk rNd S tj|d}| |_|d |_	|d |_
|j
dd	 }tjj|d
ddgd}|d rd|_d|_||_nd|_||_d}d}	|d r|d d|j d|jj }
| |d |
|d }d| }	|d dkr.|d |_n|d dkrd| jd}t|	dd}|jf ||_nL|d dkrd|	 d |_n.|d d!krd"|	 d |d  d#|_nd$|_|  |S )%NT)Z
for_updateZId)rD   Z
channel_idZ	Timestamp)message_rawZ	RemoteJid@r   Z
user_localr6   F)r    ZFromMerA   sentinr.   r/   z%Y%m%d_%H%M%S_r@   z/filesr1   r9   ZTextZaudiozrecord.html)r5   r9   r3   z
<img src="z">Zdocumentz	<a href="z</a>u4   Не поддерживаемое сообщение)rG   r*   rE   rK   r   Zfromisoformatr   r   r:   rD   r;   rL   rF   Zget_or_create_by_phonerT   r<   rU   Zperson_fromstrftimecodeZ
cmf_author
_save_filer9   
_jinja_envZget_templater(   Zrenderr   )r   r\   r   r   rV   Zmessage_daterB   rW   rN   r5   nametemplatecontextr   r   r   receive_messageg   sL    


 
zCmfWhatsapp.receive_messagec           	      C   s   t |dd }|dkr d}|| }tj d| j dt d d| }t	
d|  tjjj }||}|jd	d
d
d |jt|d	d |S )N;r   z
image/webpz.webpz/files/obj/r7   z%Y%mu/   Сохраняем файл сообщения FT)is_direxist_okparents)Zbackup)rR   Zguess_extensionrL   r)   PROJECT_DIR
class_namer   Ztodayra   gdebugrE   ZCmfRFileZdpZdata_driverZget_rdZ	get_rfileZcreatewriterP   Z	b64decode)	r   Z	file_datare   r@   Zfile_extensionZreq_filenamerN   ZrdiskZrfiler   r   r   rc      s    (
zCmfWhatsapp._save_file)NN)N)N)__name__
__module____qualname__Z_optionsZjinja2ZFileSystemLoaderospathjoinr)   rm   Z_loaderZEnvironmentrd   r   r   r   r   classmethodr"   r$   strr(   r   r[   rh   rc   __classcell__r   r   r   r   r      s   
.2r   )rP   rR   r   r   r   pathlibr   Zbs4r   Zcmf.includeZ$modules.crm.models.cmf_message_mixinr   Zcmf.appr	   r
   r   r   r   r   r   <module>   s   