o
    Qh                     @   s   d dl Z d dlmZ d dlmZ d dlmZmZmZmZ d dl	m
Z
 d dlZd dlmZ d dlmZ d dlmZ G d	d
 d
eZdS )    N)WebsocketConsumer)AsyncJsonWebsocketConsumer)ProductsProductCategoryProductSubCategorySKU)	Chat_Data)sync_to_async)apps)	Paginatorc                   @   s<   e Zd Zdd Zdd Zdd Zedd Zed	d
 ZdS )ChatConsumerc                    s   |   I d H  |  I d H }| jtd|idI d H  |d dkrB|d dkrBg }|d D ]}|t|j|jd q/||d< | jt|dI d H S )	Nada	text_datastatusTrueoption_typeCustomoptions)uuidoption_name)	acceptget_welcome_messagesendjsondumpsappendstrr   r   )selfdataoption_listi r"   :/var/www/html/Testing_prj/Navya-Bakers/chatbot/consumer.pyconnect   s   zChatConsumer.connectc                    s   d S )Nr"   )r   r"   r"   r#   
disconnect   s   zChatConsumer.disconnectc                    s   | j dd urNt|}|dd}|s%| jtddigdI d H  |dd}|dd}|d	d}| ||||I d H }| jt|dI d H S d S )
Nuser_id	option_id msgznot recongnizedr   chat_idoption_tableoption_column)scopegetr   loadsr   r   get_related_message)r   r   r   r'   r*   r+   r,   r)   r"   r"   r#   receive!   s   
zChatConsumer.receivec              
      sR  t jjdd   sdddS  jdkr)dt j j j jt	 j
 dS t fd	d
t D }|s=dddS zR|j d d dt j}t|d}|d}g }|D ]}|dt|d t jt| j i q\dt jt j jt j|t jt jdW S  ty } zdt|dW  Y d }~S d }~ww )NzWelcome Message)	chat_typeFalsezWelcome Message not definedr   messager   r   r   r*   	chat_namer2   r   r   c                 3   4    | ]}|j j d d  j kr|V  qdS _   N_metadb_tablelowersplitr+   .0modelr   r"   r#   	<genexpr>8        z3ChatConsumer.get_welcome_message.<locals>.<genexpr>invalid table   r   r;   )r   r*   r7   r2   r   r   r+   r,   )r   objectsfilterfirstr   r   r*   r7   r2   listr   allnextr
   
get_modelsvaluesr,   r   get_pager   r+   	Exception)r   rC   rows	paginatorpage	data_listr!   er"   rD   r#   r   /   s,   

(
 

,8z ChatConsumer.get_welcome_messagec              
      s  t jj|d   sdddS  jdkr!dt j j jdS  jdkr:dt j j j jt	 j
 d	S t fd
dt D }|sNdddS d}d}|j D ] }|jdkr`d}| dkrw|jjjdd |krw|j} nqWzK|jjdi ||i| j}	t|	d}
|
d}g }|D ]}|dt|d t jt| j i qt j j j j| j j|
jdW S  ty } zdt|dW  Y d }~S d }~ww )N)related_chatr3   zRelated Chat not foundr4   zEnd Messager   )r   r*   r7   r2   r   r6   c                 3   r8   r9   r<   rA   rD   r"   r#   rE   Z   rF   z3ChatConsumer.get_related_message.<locals>.<genexpr>rG   r(   idr   
ForeignKeyr:   r;   rH   )r*   r7   r2   r   r   r+   r,   total_pagesr"   )r   rI   rJ   rK   r2   r   r*   r7   r   rL   r   rM   rN   r
   rO   r=   
get_fieldsnameget_internal_typerelated_modelr>   r@   rP   r,   r   rQ   r   r+   	num_pagesrR   )r   r'   r*   r+   r,   rC   foreign_columnflagwyrS   rT   rU   rV   r!   rW   r"   rD   r#   r0   P   sD   


(

 

,*z ChatConsumer.get_related_messageN)	__name__
__module____qualname__r$   r%   r1   r	   r   r0   r"   r"   r"   r#   r      s    
 r   )r   channels.generic.websocketr   r   products.modelsr   r   r   r   chatbot.modelsr   asyncioasgiref.syncr	   django.appsr
   django.core.paginatorr   r   r"   r"   r"   r#   <module>   s    