Ë
    é¤-h:  ã                   óÜ  — d dl mZmZ ddlmZ ddlmZ d dlmZ d dlZd dl	m
Z
 ddlmZ d dlZd dlZd dlmZ d dlZd dlZd dlZd d	lmZ d d
lmZ d dlZd dlZd dlZd dlZd dlZd dl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$m%Z%m&Z& ddlm'Z'm(Z(m)Z)m*Z*m+Z+m,Z,  ejZ                  e.«      Z/d„ Z0e#d„ «       Z1d„ Z2d„ Z3ee#d„ «       «       Z4ee#ed„ «       «       «       Z5ed„ «       Z6ed„ «       Z7y)é    )ÚrenderÚredirecté   )ÚFeedback)ÚFaceProfile)ÚContentFileN)ÚJsonResponse)Údecode_base64_image)Úsettings)Úcsrf_exempt)ÚPredefinedQA)Ú	mark_safe)ÚChatLogÚChatCategory)Úxframe_options_exempt)ÚSentenceTransformerÚutil)Úgenerate_ai_responseÚget_or_create_session_dataÚhandle_category_selectionÚidentify_contactÚfind_best_match_qaÚsave_conversationc                 ó¶   — | j                   j                  d«      }|r"|j                  d«      d   j                  «       S | j                   j                  d«      S )NÚHTTP_X_FORWARDED_FORú,r   ÚREMOTE_ADDR)ÚMETAÚgetÚsplitÚstrip)ÚrequestÚx_forwarded_fors     ú*/var/www/skyplay_api_hub/feedback/views.pyÚget_client_ipr%      sN   € Ø—l‘l×&Ñ&Ð'=Ó>€OÙØ×$Ñ$ SÓ)¨!Ñ,×2Ñ2Ó4Ð4Ø�<‰<×Ñ˜MÓ*Ð*ó    c                 ó  — t        | «      }t        j                  j                  |¬«      j	                  «       }d}d}| j
                  dk(  rÂ	 t        | j                  j                  d«      «      }| j                  j                  dd«      }| j                  j                  dd«      }| j                  j                  dd«      }t        j                  j                  |||||¬	«       |d
k\  rd}t        | j                  › d|rdnd› �«      S | j                  j                  d«      dk(  rd}| j                  j                  d«      dk(  rd}t!        | d|||dœ«      S # t        $ r}	t        d|	«       Y d }	~	Œkd }	~	ww xY w)N)Ú
ip_addressFÚPOSTÚratingÚcommentÚ ÚcontactÚHTTP_REFERER)r*   r+   r-   r(   Úreferreré   Tz?submitted=1&google=r   r   z#[ERROR] Feedback submission failed:Ú	submittedÚ1Úgooglezfeedback/feedback_form.html)Úalready_submittedÚshow_thank_youÚredirect_to_google)r%   r   ÚobjectsÚfilterÚexistsÚmethodÚintr)   r   r   Úcreater   ÚpathÚ	ExceptionÚprintÚGETr   )
r"   Úipr4   r5   r6   r*   r+   r-   r/   Úes
             r$   Úfeedback_widgetrC   $   sx  € ä	�wÓ	€BÜ ×(Ñ(×/Ñ/¸2Ð/Ó>×EÑEÓGÐØ€NØÐà‡~�~˜Òð	<Ü˜Ÿ™×)Ñ)¨(Ó3Ó4ˆFØ—l‘l×&Ñ& y°"Ó5ˆGØ—l‘l×&Ñ& y°"Ó5ˆGØ—|‘|×'Ñ'¨¸Ó;ˆHä×Ñ×#Ñ#ØØØØØ!ð $ô ð ˜Š{Ø%)Ð"ô ˜wŸ|™|˜nÐ,@ÑFXÁÐ^_Ð@`ÐaÓbÐbð ‡{�{‡��{Ó# sÒ*ØˆØ‡{�{‡��xÓ  CÒ'Ø!Ðä�'Ð8Ø.Ø(Ø0ñ;ó ð øô ò 	<ÜÐ7¸×;Ñ;ûð	<ús   ÁC E  Å 	E?Å)E:Å:E?c                 óH  — | j                   dk(  �r| j                  j                  dd«      j                  «       }| j                  j                  dd«      j                  «       }| j                  j                  d«      }|r|st	        dddœ«      S |st	        dd	dœ«      S t        |«      }|€t	        dd
dœ«      S t        j                  |«      }t        j                  |«      }|st	        dddœ«      S t        j                  ||«      }|d   }t        j                  j                  «       D ]C  }	|	j                  «       }
|
€Œt        j                  |
g|d¬«      }|d   sŒ5t	        dddœ«      c S  t!        j"                  «       j$                  › d�}t'        j(                  «       }|j+                  |d¬«       t-        |j/                  «       |¬«      }t        |||¬«      }	|	j1                  |«       |	j+                  «        t	        dddœ«      S t	        dddœ«      S )Nr)   Únamer,   ÚphoneÚ
image_dataFz#Name and phone number are required.©ÚsuccessÚmessagezImage data is missing.úInvalid image data.zNo face found in image.r   ç      à?©Ú	tolerancez This face is already registered.z.jpgÚJPEG)Úformat)rE   )rE   Úphone_numberÚ
face_imageTzFace registered successfully!zInvalid request method.)r:   r)   r   r!   r	   r
   ÚnpÚarrayÚface_recognitionÚface_locationsÚface_encodingsr   r7   ÚallÚget_encodingÚcompare_facesÚuuidÚuuid4ÚhexÚioÚBytesIOÚsaver   ÚgetvalueÚset_encoding)r"   rE   rF   rG   ÚimageÚimage_nprV   rW   ÚencodingÚprofileÚknown_encodingÚmatchesÚ	file_nameÚimage_ioÚ
image_files                  r$   Úface_registerrl   P   s&  € Ø‡~�~˜ÓØ�|‰|×Ñ ¨Ó+×1Ñ1Ó3ˆØ—‘× Ñ  ¨"Ó-×3Ñ3Ó5ˆØ—\‘\×%Ñ% lÓ3ˆ
á™5ÜØ Ø@ñ!ó ð ñ
 ÜØ Ø3ñ!ó ð ô
 $ JÓ/ˆØˆ=ÜØ Ø0ñ!ó ð ô
 —8‘8˜E“?ˆÜ)×8Ñ8¸ÓBˆÙÜØ Ø4ñ!ó ð ô
 *×8Ñ8¸À>ÓRˆØ! !Ñ$ˆä"×*Ñ*×.Ñ.Ó0ò 	ˆGØ$×1Ñ1Ó3ˆNØÑ)Ü*×8Ñ8¸.Ð9IÈ8Ð_bÔc�Ø˜1“:Ü'Ø#(Ø#Eñ)ó ò ð	ô —z‘z“|×'Ñ'Ð(¨Ð-ˆ	Ü—:‘:“<ˆØ�
‰
�8 Fˆ
Ô+Ü  ×!2Ñ!2Ó!4¸9ÔEˆ
ä 4°eÈ
ÔSˆØ×Ñ˜XÔ&Ø�‰ŒäØØ6ñ
ó ð 	ô
 ØØ,ñó ð r&   c                 ó˜  — | j                   dk(  �r/| j                  j                  d«      }t        |«      }|€t	        dddœ«      S t        j                  |«      }t        j                  |«      }|st	        dddœ«      S t        j                  ||«      }|d   }t        j                  j                  «       D ]u  }|j                  «       }|€Œt        j                  |g|d¬	«      }	|	d   sŒ5|j                  | j                   d
<   t	        dd|j"                  › d�|j                  dœ«      c S  t	        dddœ«      S t%        | d«      S )Nr)   rG   FrK   rH   zNo face detected.r   rL   rM   rQ   Tz	Welcome, ú!)rI   rJ   rF   zFace not recognized.zfeedback/face_login.html)r:   r)   r   r
   r	   rS   rT   rU   rV   rW   r   r7   rX   rY   rZ   rQ   ÚsessionrE   r   )
r"   rG   rc   rd   rV   rW   Úlogin_encodingrf   rg   rh   s
             r$   Ú
face_loginrq   ‘   sC  € Ø‡~�~˜ÓØ—\‘\×%Ñ% lÓ3ˆ
Ü# JÓ/ˆàˆ=Ü¨EÐ>SÑ TÓUÐUä—8‘8˜E“?ˆÜ)×8Ñ8¸ÓBˆÙÜ¨EÐ>QÑ RÓSÐSä)×8Ñ8¸À>ÓRˆØ'¨Ñ*ˆä"×*Ñ*×.Ñ.Ó0ò 
	ˆGØ$×1Ñ1Ó3ˆNØÑ)Ü*×8Ñ8¸.Ð9IÈ>ÐehÔi�Ø˜1“:Ø6=×6JÑ6J�G—O‘O NÑ3Ü'Ø#'Ø%.¨w¯|©|¨n¸AÐ#>Ø!(×!5Ñ!5ñ)ó ò ð
	ô ¨Ð:PÑQÓRÐRä�'Ð5Ó6Ð6r&   c                 ó   — t        | d«      S )Nzfeedback/chat_widget.html)r   )r"   s    r$   Úchat_widgetrs   ´   s   € ô �'Ð6Ó7Ð7r&   c                 ó 
  — | j                   dk7  rt        ddi«      S 	 t        j                  | j                  «      }|j                  dd«      j                  «       }|j                  d«      }|j                  dd«      j                  «       }|j                  dd«      j                  «       }|r|st        dd	i«      S d
|› �}t        | j                  |||«      }|j                  «       dv rf|j                  dd «       || j                  |<   t        dt        j                  j                  dd¬«      D �cg c]  }|j                  ‘Œ c}dœ«      S d|vrt        ddi«      S d|vrt        dd|d   › d�i«      S |j                  d«      }	|	r.t        j                  j                  |	¬«      j                  «       nd }
t        j                  j                  |
d¬«      }|j!                  «       �r|D �cg c]  }|j                  j                  «       ‘Œ }}|j                  «       |v r°|j                  |¬«      }|j"                  |d<   || j                  |<   t        j                  j                  |d¬«      }|j!                  «       r4t        d|j                  › d�|D �cg c]  }|j                  ‘Œ c}dœ«      S t        dd|j                  › d�i«      S t        d|D �cg c]  }|j                  ‘Œ c}dœ«      S |
r t%        |d   «      \  }}t'        ||
«      }t)        |«      dkD  r=t+        |«      D ��cg c]  \  }}|dz   › d|j,                  › �‘Œ }}}t        d|dœ«      S |r|d    j.                  nt1        ||«      }t3        ||||«       t        d|i«      S t        j                  j                  dd¬«      }|D �cg c]  }|j                  j                  «       ‘Œ }}|j                  «       |v r…|j                  |¬«      }|j"                  |d<   || j                  |<   t        j                  j                  |d¬«      }t        d|j                  › d�|D �cg c]  }|j                  ‘Œ c}dœ«      S t        d!|d   › d"�|D �cg c]  }|j                  ‘Œ c}dœ«      S c c}w c c}w c c}w c c}w c c}}w c c}w c c}w c c}w # t4        $ r,}t6        j9                  d#«       t        dd$i«      cY d }~S d }~ww xY w)%Nr)   ÚanswerzInvalid request.rJ   r,   Ú
session_idrE   r-   z$Message and session_id are required.Ú
chat_user_)ÚrestartÚclearz
start overÚcategory_idzMCategory selection has been reset. Please choose a main category to continue:T©Úparent__isnullÚ	is_active©ru   Ú
categoriesz;Hey there! May I know your name so I can assist you better?zNice to meet you, z4! Could you please share your email or phone number?©Úid©Úparentr}   )Úname__iexactzYou selected: z. Please choose a subcategory:z!You selected the final category: z . Now, please ask your question.z,Please choose a category from the following:r   z. zKYour question matched multiple entries. Please choose one of the following:)ru   Úoptionsr   zThank you, zg! You're connected to SkyBee Assistant. Please select one of the following main categories to continue:zError in chat_api:z$An error occurred. Please try again.)r:   r	   ÚjsonÚloadsÚbodyr   r!   r   ro   ÚlowerÚpopr   r7   r8   rE   Úfirstr9   r�   r   r   ÚlenÚ	enumerateÚquestionru   r   r   r>   ÚloggerÚ	exception)r"   ÚdatarJ   rv   Ú	user_nameÚuser_contactÚsession_keyÚsession_dataÚcatÚcurrent_cat_idÚcurrent_categoryÚsubcategoriesÚ	sub_namesÚselectedÚ
child_subsÚ
user_emailÚ
user_phoneÚbest_matchesÚiÚqar…   ru   Úroot_categoriesÚ
root_namesÚsubsrB   s                             r$   Úchat_apir¥   ¹   s  € ð
 ‡~�~˜ÒÜ˜XÐ'9Ð:Ó;Ð;ðhPÜ�z‰z˜'Ÿ,™,Ó'ˆØ—(‘(˜9 bÓ)×/Ñ/Ó1ˆØ—X‘X˜lÓ+ˆ
Ø—H‘H˜V RÓ(×.Ñ.Ó0ˆ	Ø—x‘x 	¨2Ó.×4Ñ4Ó6ˆá™jÜ Ð+QÐ RÓSÐSà" : ,Ð/ˆÜ1°'·/±/À;ÐPYÐ[gÓhˆð �=‰=‹?Ð@Ñ@Ø×Ñ˜]¨DÔ1Ø+7ˆG�O‰O˜KÑ(ÜØiÜ3?×3GÑ3G×3NÑ3NÐ^bÐnrÐ3NÓ3sÖt¨C˜sŸx›xÒtñ!ó ð ð ˜Ñ%Ü Ð+hÐ iÓjÐjð ˜LÑ(ÜØÐ.¨|¸FÑ/CÐ.DÐDxÐyð!ó ð ð
 &×)Ñ)¨-Ó8ˆÙUcœ<×/Ñ/×6Ñ6¸.Ð6ÓI×OÑOÔQÐimÐÜ$×,Ñ,×3Ñ3Ð;KÐW[Ð3Ó\ˆà×ÑÕ!Ø5BÖC¨c˜Ÿ™Ÿ™Õ)ÐCˆIÐCà�}‰}‹ )Ñ+Ø(×,Ñ,¸'Ð,ÓB�Ø.6¯k©k�˜]Ñ+Ø/;�—‘ Ñ,ä)×1Ñ1×8Ñ8ÀÐTXÐ8ÓY�
Ø×$Ñ$Ô&Ü'Ø$2°8·=±=°/ÐA_Ð"`Ø;EÖ&F°C s§x£xÒ&Fñ)ó ð ô
 (Ø Ð$EÀhÇmÁmÀ_ÐTtÐ"uð)ó ð ô
  ØHØ3@ÖA¨C˜sŸx›xÒAñ!ó ð ñ Ü%5°lÀ9Ñ6MÓ%NÑ"ˆJ˜
Ü-¨gÐ7GÓHˆLä�<Ó  1Ò$Ü@IÈ,Ó@W×X±u°q¸"˜a ™c˜U " R§[¡[ MÒ2ÐX�ÑXÜ#ØkØ&ñ%ó ð ñ
 0<�\ !‘_×+Ò+ÔAUÐV]Ð_kÓAlˆFÜ˜j¨,¸ÀÔHä ¨6Ð 2Ó3Ð3ô '×.Ñ.×5Ñ5ÀTÐUYÐ5ÓZˆØ2AÖB¨3�c—h‘h—n‘nÕ&ÐBˆ
ÐBà�=‰=‹?˜jÑ(Ø&×*Ñ*¸Ð*Ó@ˆHØ*2¯+©+ˆL˜Ñ'Ø+7ˆG�O‰O˜KÑ(ä×'Ñ'×.Ñ.°hÈ$Ð.ÓOˆDÜØ*¨8¯=©=¨/Ð9WÐXØ37Ö8¨C˜sŸx›xÒ8ñ!ó ð ô
 à˜l¨6Ñ2Ð3ð 4Rð Rð 0?Ö?¨˜3Ÿ8›8Ò?ñ
ó ð 	ùòW uùò& Dùò 'Gùò Bùó Yùò Cùò 9ùò @øô ò PÜ×ÑÐ-Ô.Ü˜XÐ'MÐNÓOÕOûðPúsÄ   žB S Â?A9S Ä8R/
ÅS ÅS Å%S Å=A9S Ç6!R4ÈBS Ê$R9
Ê7S Ë S Ë
S Ë%R>
Ë8S Ì;S Ì<SÍS Í+7S Î#%S Ï!S	Ï)A=S Ñ&S
Ñ9S ÒS ÒS
Ò&S Ò/)S Ó	TÓ!!TÔTÔTc                 óv  — 	 t        j                  | j                  «      }|j                  d«      }|st	        ddi«      S d|› �}| j
                  j                  |i «      }|j                  d«      }|j                  d«      }|j                  dd «       || j
                  |<   |r|st	        dd	d
œ«      S t        j                  j                  d	d	¬«      }t	        d|D �cg c]  }|j                  ‘Œ c}dœ«      S c c}w # t        $ r,}	t        j                  d«       t	        ddi«      cY d }	~	S d }	~	ww xY w)Nrv   ru   zSession ID is required.rw   r’   r“   rz   z(Please enter your name and contact info.T)ru   Úprompt_for_detailsr{   zJCategory selection has been cleared. Please choose a category to continue.r~   zError resetting category:z2Something went wrong while resetting the category.)r†   r‡   rˆ   r   r	   ro   rŠ   r   r7   r8   rE   r>   r�   r�   )
r"   r‘   rv   r”   r•   r’   r“   r¢   r–   rB   s
             r$   Úreset_categoryr¨   -  s;  € ð"^Ü�z‰z˜'Ÿ,™,Ó'ˆØ—X‘X˜lÓ+ˆ
áÜ Ð+DÐ EÓFÐFà" : ,Ð/ˆØ—‘×*Ñ*¨;¸Ó;ˆð !×$Ñ$ [Ó1ˆ	Ø#×'Ñ'¨Ó7ˆð 	×Ñ˜¨Ô-Ø'3ˆ�‰˜Ñ$ñ ¡ÜØDØ&*ñ!ó ð ô '×.Ñ.×5Ñ5ÀTÐUYÐ5ÓZˆÜØbØ/>Ö?¨˜3Ÿ8›8Ò?ñ
ó ð 	ùâ?øô ò ^Ü×ÑÐ4Ô5Ü˜XÐ'[Ð\Ó]Õ]ûð^ús<   ‚>D ÁA5D Â7+D Ã"C>
Ã5D Ã>D Ä	D8Ä!D3Ä-D8Ä3D8c                 óô  — | j                   j                  dd«      j                  «       j                  «       }g }| j                   j                  d«      }|st	        ddgi«      S d|› �}| j
                  j                  |i «      }|j                  d«      }|st	        ddgi«      S 	 t        j                  j                  |¬	«      }t        j                  j                  |d
¬«      j                  «       }|rt	        ddgi«      S |r=t        j                  j                  ||¬«      d d }	|	D �
cg c]  }
|
j                  ‘Œ }}
|sdg}t	        d|i«      S c c}
w # t        j                  $ r dg}Y Œ*w xY w)NÚqr,   rv   ÚsuggestionszMissing session_id.rw   rz   zPlease select a category first.r€   Tr‚   z2Please select a final category to see suggestions.)ÚcategoryÚquestion__icontainsé
   z>No questions found for this category. Try a different keyword.z*Invalid category selected. Please restart.)r@   r   r!   r‰   r	   ro   r   r7   r8   r9   r   rŽ   ÚDoesNotExist)r"   rª   r«   rv   r”   r•   rz   r˜   Úhas_childrenÚmatched_qasr¡   s              r$   Úsuggestions_apir²   U  sŽ  € à�‰�‰˜˜RÓ ×&Ñ&Ó(×.Ñ.Ó0€AØ€Kð —‘—‘ Ó.€JÙÜ˜]Ð-BÐ,CÐDÓEÐEà˜z˜lÐ+€KØ—?‘?×&Ñ& {°BÓ7€Lð ×"Ñ" =Ó1€KÙÜ˜]Ð-NÐ,OÐPÓQÐQðEÜ'×/Ñ/×3Ñ3°{Ð3ÓCÐô $×+Ñ+×2Ñ2Ð:JÐVZÐ2Ó[×bÑbÓdˆÙÜ Ð1eÐ0fÐ gÓhÐháÜ&×.Ñ.×5Ñ5Ø)Ø$%ð 6ó ð ˆrðˆKð 2=Ö=¨2˜2Ÿ;›;Ð=ˆKÐ=áØ[Ð\ˆKô
 ˜¨Ð4Ó5Ð5ùò >øô
 ×$Ñ$ò EØCÐDŠðEús+   Â)AE Ä*E Ä2EÅE ÅE ÅE7Å6E7)8Údjango.shortcutsr   r   Úmodelsr   r   Údjango.core.files.baser   Úbase64Údjango.httpr	   Úutilsr
   ÚnumpyrS   rU   r[   r^   ÚopenaiÚdjango.confr   Údjango.views.decorators.csrfr   r†   ÚloggingÚreÚosÚdifflibÚ	tracebackr   Údjango.utils.safestringr   r   r   Ú$django.views.decorators.clickjackingr   Úsentence_transformersr   r   r   r   r   r   r   r   Ú	getLoggerÚ__name__r�   r%   rC   rl   rq   rs   r¥   r¨   r²   © r&   r$   ú<module>rÈ      s  ðß -Ý Ý Ý .Û õ %Ý &Û Û Ý .Û Û 	Û Ý  Ý 4ß Ó Û 	Û Û Ý  Ý -ß (Ý Fß ;÷ X÷  Xà	ˆ×	Ñ	˜8Ó	$€ò+ð ñ)ó ð)òV?òB7ðF Øñ8ó ó ð8ð ØàñlPó ó ó ðlPð` ñ#^ó ð#^ðN ñ&6ó ñ&6r&   