
    h                        d dl Z d dlmZmZmZmZmZmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d dlmZ d d	l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 d dlmZm Z m!Z! d dl"m#Z# d dl$m%Z%  e       Z&e&jO                  d      defd       Z(e&jS                  de  ee#      g       ee       ee#      fdedede	fd       Z*e&jW                  de  ee#      g       ee       ee#      fde	fd       Z,e&jW                  dee!          ee      fde	fd       Z-e&jW                  d      d         Z.e&jW                  d!      d(d"e/fd#       Z0d dlmZ  G d$ d%e      Z1e&jS                  d&      de1fd'       Z2y))    N)	APIRouterDepends	WebSocketWebSocketDisconnectHTTPExceptionRequest)Session)List)get_db)Module)	BaseModel)sample_task_menu_design)ChatRequestMenuDesignGenerator)get_pusher_client)SessionLocal)generate_image)GeneratedImage)ImageRequestImageResponse	ModuleOut)get_current_user)Branchz/chat	websocketc                   K   | j                          d{    	 t        d       	 	 | j                          d{   }t        j                  |      }|j                  d      }|j                  d      }|r|s/| j                  t        j                  ddi             d{    t        d| d|        t        |	      }t        ||
      }|j                  |      }t        d| d|        | j                  t        j                  |             d{    7 7 7 7 # t        $ r t        d       Y nOt        $ rD}dt        |      i}	| j                  t        j                  |	             d{  7   Y d}~gd}~ww xY w	 | j                          d{  7   t        d       y# | j                          d{  7   t        d       w xY ww)zH
    WebSocket endpoint for live chat between frontend and backend.
    Nz!WebSocket connection established.
session_idmessageerrorzInvalid inputzReceived from client (Session z): r   r   r   zSending to client (Session z*WebSocket connection closed by the client.z WebSocket connection terminated.)acceptprintreceive_textjsonloadsget	send_textdumpsr   r   chatr   	Exceptionstrclose)
r   datar   r   user_messageagentreqresponsee	error_msgs
             B/var/www/html/hubwallet-dev/src/menu_design/apps/AI_chat/router.pywebsocket_chatr5      s    
 


'212A&3355**T*$[[6
&{{95 "#--djj'?9S.TUUU6zl#l^TU ,zB!ZN ::c? 3J<s8*MN))$**X*>???3 	  6 V @& BC A$c!f-	))$**Y*?@@@A  oo01 oo01s   G!D$G!F8 D- D'A(D- %D)&D- *F8 +A3D- D+D- #F8 $G!'D- )D- +D- -FF8 F4F
?F F
F8 
FF8 G!&F)'G!8GGGG!z/generate-image)response_modeldependenciesrequestimage_requestdbc                   K   	 |j                  t              j                  t        j                  |j                  k(  t        j                  |j                  k(        j                         }|st        dd      |j                  }|j                  }|j                  r|j                  nd}t        |j                  |j                  |j                  |      }|D ],  }	t        |j                  |||	      }
|j                  |
       . |j                          t!        |      S # t"        $ r}t        dd	t%        |             d }~ww xY ww)
Ni  z>You do not have permission to generate images for this branch.status_codedetail   )desclayoutstyleimage_number)	branch_iduser_idstore_id	image_url
image_urls  zError generating images: )queryr   filterrD   rE   firstr   rF   rC   r   r@   rA   rB   r   addcommitr   r*   r+   )r8   r9   r:   userbranchrE   rF   rC   rI   rG   	new_imager2   s               r4   create_imagerS   F   sD    ,Z&!(( 7 77NNdll*
 %' 	
 W  ..?? 6C5O5O}11UV $## ''%%%	

 $ 	I&'11!#	I FF9	 			 
33 Z6OPSTUPVx4XYYZs)   ED#D( 'E(	E1E

EEz/generated-imagesc                 N  K   	 | j                  t              j                  t        j                  |j                  k(        j	                         }|D cg c]  }|j
                   }}t        |      S c c}w # t        $ r}t        ddt        |             d }~ww xY ww)NrH   rJ   zError fetching images: r<   )
rK   r   rL   rE   allrG   r   r*   r   r+   )r:   rP   imagesimagerI   r2   s         r4   get_generated_imagesrX   }   s     
X.)00""dll2

#% 	
 4::%eoo:
:
33 ;  X6McRSfX4VWWXs;   B%AA; A6(A; 5B%6A; ;	B"BB""B%z/modules)r6   c                 H    | j                  t              j                         S )N)rK   r   rU   )r:   s    r4   get_modulesrZ      s    88F!!    z/celery-healthc                      	 ddl m}  | j                  j                         }|j	                         }dd|dS # t
        $ r}ddt        |      dcY d	}~S d	}~ww xY w)
z'Check if Celery and Redis are availabler   )
celery_apphealthyzCelery and Redis are available)statusr   stats	unhealthyz Celery or Redis is not available)r_   r   detailsN)src.utils.celery_workerr]   controlinspectr`   r*   r+   )r]   ir`   r2   s       r4   check_celery_healthrg      se    
6&&(	7
 	

  
!71v
 	

s   58 	AAAAz	/run-tasknamec                     	 t        j                  |       }|j                  ddS # t        $ r.}t	        |      }d|v sd|v rd|ddcY d }~S d|ddcY d }~S d }~ww xY w)	NzTask submitted)task_idr_   zConnection refusedzNo hostname was suppliedz\Celery worker is not available. Please ensure Redis is running and Celery worker is started.failed)r   rb   r_   zTask submission failed)r   delayidr*   r+   )rh   taskr2   r3   s       r4   run_sample_taskro      sx    &,,T277.>?? F	9,0Ji0Ww$"  2$" s&   #& 	AAAAAAc                   "    e Zd ZU eed<   eed<   y)TestChatRequestr   r   N)__name__
__module____qualname__r+   __annotations__ r[   r4   rq   rq      s    OLr[   rq   z
/test-chatc                 ^   	 t        d| j                   d| j                          t        | j                        }t	        | j                  | j                        }|j                  |      }|S # t        $ r2}t        dt        |              t        dt        |            d}~ww xY w)	zW
    Simple POST endpoint to test menu_agent chat functionality without WebSocket.
    zTesting chat session z with message: r   r    zError during chat testing: rJ   r<   N)	r"   r   r   r   r   runr*   r+   r   )r8   
menu_agentchat_requestr1   r2   s        r4   test_chat_endpointr{      s    
<%g&8&8%9HYZ[ )G4F4FG
"g.@.@'//Z>>,/  <+CF845CF;;<s   A.A1 1	B,:-B''B,)
CeleryUser)3osfastapir   r   r   r   r   r   sqlalchemy.ormr	   typingr
   src.utils.dbr   #src.menu_design.apps.AI_chat.modelsr   pydanticr   src.menu_design.tasks.tasksr    src.menu_design.core.menu_designr   r   src.utils.pusher_configr   r$   r   'src.menu_design.apps.AI_chat.controllerr   r   $src.menu_design.apps.AI_chat.schemasr   r   r   src.apps.auth.controllerr   src.apps.stores.modelsr   routerr   r5   postrS   r&   rX   rZ   rg   r+   ro   rq   r{   rv   r[   r4   <module>r      s   	 ^ ^ "   6  ? M 5  % B > U U 5 )	 ',2I ,2 ,2^ }GTdLeKfg &/	!	"	2Z2Z2Z 	2Z h2Zl WUeMfLgh&/	!	"XX iX( JtI7%fo "G " 8" 
 
& K#  0 i  \< < <r[   