o
    ɸg                     @   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 }|d dkr4|d dkr4g }|d D ]}|t|j|jd q!||d< | jt|dI d H S )NstatusTrueoption_typeCustomoptions)uuidoption_name	text_data)	acceptget_welcome_messageappendstrr   r   sendjsondumps)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_namer1   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)   r6   r1   r   r   r*   r+   )r   objectsfilterfirstr   r   r)   r6   r1   listr   allnextr
   
get_modelsvaluesr+   r   get_pager   r*   	Exception)r   rB   rows	paginatorpage	data_listr    er!   rC   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_chatr2   zRelated Chat not foundr3   zEnd Messager   )r   r)   r6   r1   r   r5   c                 3   r7   r8   r;   r@   rC   r!   r"   rD   Z   rE   z3ChatConsumer.get_related_message.<locals>.<genexpr>rF   r'   idr   
ForeignKeyr9   r:   rG   )r)   r6   r1   r   r   r*   r+   total_pagesr!   )r   rH   rI   rJ   r1   r   r)   r6   r   rK   r   rL   rM   r
   rN   r<   
get_fieldsnameget_internal_typerelated_modelr=   r?   rO   r+   r   rP   r   r*   	num_pagesrQ   )r   r&   r)   r*   r+   rB   foreign_columnflagwyrR   rS   rT   rU   r    rV   r!   rC   r"   r/   P   sD   


(

 

,*z ChatConsumer.get_related_messageN)	__name__
__module____qualname__r#   r$   r0   r	   r   r/   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    