
    -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    ll&&'=>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4Fll&&y"5Gll&&y"5G||'';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!  
 88E?)88B 4!  
 *88>R!!$"**..0 	G$113N)*88.9I8_bc1:'#(#E)  	 zz|''(-	::<

8F
+ !2!2!49E
4e
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88E?)88BE>Q RSS)88>R'*"**..0 
	G$113N)*88.9I>ehi1:6=6J6JGOON3'#'%.w||nA#>!(!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 |
rt%        |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zz',,'((9b)//1XXl+
HHVR(..0	xx	2.446j+Q RSS":,/1'//;PY[gh ==?@@]D1+7GOOK(i3?3G3G3N3N^bnr3N3stCsxxt!   %+h ijj L(.|F/C.DDxy!  
 &))-8Uc<//66.6IOOQim$,,33;KW[3\!5BCc)CIC}})+(,,',B.6kk]+/;,)1188TX8Y
$$&'$28==/A_"`;E&FCsxx&F)  
 ( $Ehmm_Tt"u)  
  H3@ACsxxA!   %5l96M%N"J
-g7GHL< 1$@I,@WXuq"acU"R[[M2XX#k&%  
 0<\!_++AUV]_kAlFj,H6 233 '..55TUY5Z2AB3chhnn&B
B==?j(&***@H*2++L'+7GOOK(''..h$.OD*8==/9WX378Csxx8!  
 l623 4R R 0??388?
  	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;   "^zz',,'XXl+
+D EFF":,/**;; !$$[1	#''7 	-'3$ D&*!   '..55TUY5Zb/>?388?
  	?  ^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 &&(..0AK .J]-B,CDEEzl+K??&&{B7L ""=1K]-N,OPQQE'//33{3C $++22:JVZ2[bbd1e0f ghh&..55)$% 6  rK 2==22;;=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7F 8  8 lP   lP` #^ #^N &6 &6r&   