
    g@                     |   S SK J r   S SKJrJrJr  S SKJrJr  S SKJ	r	  S SK
JrJr  S SKJr  S SKJr  S SKJrJrJrJrJrJrJrJrJrJr  S S	KJr  S S
KJr  S SK r \" 5       r!Sr"Sr#\!RI                  \S/SS/S/S9  \" S/SS9r%\!RM                  S5      \" \5      4S\S\4S jj5       r'S\(4S jr)\!RM                  SS/S9\" \5      4S\S\4S jj5       r*\!RW                  S5      \" \5      4S\,S\4S  jj5       r-S!\,S"\,4S# jr.\!RW                  S$5      \" \5      4S\,S%\,S\4S& jj5       r/\!RW                  S'5      \" \5      4S%\,S(\,S)\,S\4S* jj5       r0\!RW                  S+5      \" \5      4S\,S,\,S\4S- jj5       r1\!RW                  S.5      \" \5      4S\,S\4S/ jj5       r2\!RW                  S05      \" \5      4S1\,S2\,S3\,S4\,S5\,S6\,S7\,S8\,S\4S9 jj5       r3\!RW                  S:5      \" \5      4S\,S\4S; jj5       r4\!RM                  S<5      \" \5      4S\S\4S= jj5       r5\!RW                  S>5      \" \5      4S\,S\4S? jj5       r6\!RW                  S@5      \" \5      4SA\,S\4SB jj5       r7\!RW                  SC5      \" \5      4SA\,S\4SD jj5       r8\!RW                  SE\SF9\" \5      4S\,S\4SG jj5       r4g)H    )datetime)FastAPIHTTPExceptionDepends)and_func)declarative_base)sessionmakerSession)uuid4)CORSMiddleware)
MainTaskSessionUmrahSessionUmrahTaskSubTaskFemaleSubTaskMale
UserCreateUser	UserLoginMiqatSubmissionUserResponse)get_db)CryptContextNzyour-secret-keyHS256*T)allow_originsallow_credentialsallow_methodsallow_headersbcryptauto)schemes
deprecatedz/users/registeruserdbc                 "   UR                  [        5      R                  [        R                  U R                  :H  5      R	                  5       nU(       a
  [        SSS9e[        R                  U R                  5      n[        [        [        5       5      U R                  U R                  UU R                  U R                  U R                  U R                  S9nUR!                  U5        UR#                  5         UR%                  U5        SS0$ )Ni  zEmail already registeredstatus_codedetail)idnameemailpassword
date_birthgendercountryphone_numbermessagezUser registered successfully)queryr   filterr,   firstr   pwd_contexthashr-   strr   r+   r.   r/   r0   r1   addcommitrefresh)r$   r%   existing_userhashed_passwordnew_users        /home/matz/Project1/umrah.pyregister_userr@      s     HHTN))$**

*BCIIKM4NOO "&&t}}5Ouw<YYjj ??{{&&
H FF8IIKJJx566    datac                 >    [         R                  " U [        [        S9$ )N)	algorithm)jwtencode
SECRET_KEY	ALGORITHM)rB   s    r?   create_access_tokenrI   7   s    ::dJ)<<rA   z/users/loginAuthentication)tagsc                 `   UR                  [        5      R                  [        R                  U R                  :H  5      R	                  5       nU(       d  [        SU R                   S35        O`[        R                  U R                  UR                  5      (       d  [        SU R                   35        O[        SU R                   35        U(       a/  [        R                  U R                  UR                  5      (       d
  [        SSS9e[        UR                  UR                  S.5      n[        UR                  U5      nUS :X  a  S	UUR                  S
.$ S	UUUR                  UR                  UR                  UR                  UR                  UR                   UR"                  S.
$ )NzUser with email z
 not foundzPassword incorrect for zLogin successful for i  zInvalid email or passwordr'   )subuser_idzLogin successful)r2   tokenrN   )
r2   rO   
Session_IDrN   	user_namer,   r/   r0   r.   r1   )r3   r   r4   r,   r5   printr6   verifyr-   r   rI   r*   checkSessionr+   r/   r0   r.   r1   )r$   r%   db_userrO   sessions        r?   
login_userrW   :   sJ   hhtn##DJJ$**$<=CCEG J78w/?/?@@'

|45%djj\23+,,T]]G<L<LMM4OPP'** MNEB'G%:: 	 * zz ]]nn!,,#00
 	
rA   z/checkrN   c                 
   UR                  [        5      R                  [        R                  U :H  [        R                  S:H  5      R                  5       nU(       a$  UR                  UR                  UR                  S.$ SS0$ )Nr   )r2   miqatdateerrorz
No Session)	r3   r   r4   id_userstatusr5   r*   rY   start_umrah)rN   r%   rV   s      r?   rT   rT   _   sf    HH\")),*>*>*GH[H[]^H^_eegG!**W]]'BUBUVV%%rA   urlreturnc                 D    U (       a  SU ;   a  U R                  SS5      $ U $ )z0Convert YouTube Shorts URL to embeddable format.zyoutube.com/shorts/zyoutube.com/embed/)replace)r_   s    r?   convert_to_embed_urlrc   v   s%    
$+{{02FGGJrA   z
/list_task
session_idc                   #     UR                  [        5      R                  [        R                  U :H  5      R	                  5       nU(       d  SS0$ UR
                  n/ nUS:X  a  [        O[        nUR                  [        5      R                  5       nU GHm  nUR                  U5      R                  UR                  UR                  :H  5      R                  UR                  R                  5       5      R                  5       n	/ n
U	 H  nUR                  [        5      R                  [        R                  U:H  [        R                   UR"                  :H  5      R	                  5       nU
R%                  UR"                  UR&                  UR(                  UR*                  UR,                  UR.                  UR                  UR0                  S.5        M     UR%                  UR                  UR2                  U
S.5        GMp     SUR5                  5        S3US.$ ! [6         a  nS	[9        U5      0s S nA$ S nAff = f7f)
Nr2   User not foundmale)	subtaskidr+   hukum
task_imageinfo
video_pathno_taskr]   )r*   r+   taskz
You are a z, here are your tasks)r2   tasksr[   )r3   r   r4   r*   r5   r/   r   r   r   allid_main_taskorder_byrm   ascr   session_umrah_idtask_idid_sub_taskappendname_subtaskri   rj   rk   rl   r]   	name_task
capitalize	Exceptionr8   )rN   rd   r%   r$   r/   	task_listSubTaskModel
main_tasksmainsubtaskssubtask_listrM   r]   es                 r?   	list_taskr   |   s"    2!xx~$$TWW%78>>@/00	 '-&6{M XXh'++-
 Dxx-44\5N5NRVRcRc5cdmmo{  pD  pD  pH  pH  pJ  K  O  O  QHL  xx 01889I9Z9Z\f9fgwgg  BE  BQ  BQ  hQ  R  X  X  Z##!$,, YY"%..HH"%.."{{$mm	% 	   ''~~$ - : $F$5$5$7#88MN
 	

  !Q  !sB   IAH  IGH  I 
I*H<6I7I<IIz/toggleru   statussc                 6  #     UR                  [        5      R                  [        R                  U :H  [        R                  U:H  5      R                  5       nU(       a  X$l        UR                  5         SS0$ SS0$ !   UR                  5         SS0s $ = f7f)Nr2   Successr[   z	Not FOundzDatabase connection failed)	r3   r   r4   rt   ru   r5   r]   r:   rollback)rd   ru   r   r%   r]   s        r?   toggle_taskr      s     	7xx()001A1R1RT^1^_o_w_w  zA  `A  B  H  H  J!MIIKi(($$7
566s)   BA5A> 9B:A> =B>BBz/start_umrahmiqatsc                 j  #     UR                  [        5      R                  [        R                  U :H  5      R	                  5       nU(       d  SS0$ UR                  [
        5      R                  [
        R                  U :H  [
        R                  S:H  5      R	                  5       nU(       a  SS0$ UR                  n[        U U[        R                  " 5       SS9nUR                  U5        UR                  5         UR                  U5        US:X  a  [        O[        nUR                  U5      R!                  5       n/ n	U H  n
[#        UR                  U
R$                  SS9nUR                  U5        U	R'                  U
R$                  U
R(                  U
R*                  U
R,                  U
R.                  U
R0                  U
R2                  S	S
.5        M     UR                  5         SU S3UR                  U	S.$ ! [4         a'  nUR7                  5         S[9        U5      0s S nA$ S nAff = f7f)Nr2   rf   r   Ongoing)r\   rY   r^   r]   rg   
incomplete)rt   ru   r]   F)ru   r+   ri   rj   rk   rl   rm   r]   zYou are z!, your Umrah session has started.)r2   rd   ro   r[   )r3   r   r4   r*   r5   r   r\   r]   r/   r   utcnowr9   r:   r;   r   r   rp   r   rv   rw   rx   ri   rj   rk   rl   rm   r{   r   r8   )rN   r   r%   r$   rV   r/   new_sessionr}   r|   session_tasksrn   session_taskr   s                r?   r^   r^      s    ;!xx~$$TWW%78>>@/00((<(//0D0Dg0MlNaNacdNdekkmi(([[F&$OO-	K FF;IIKJJ{# +1F*:;L .224I M!/%0^^ ,,' 
 |$$$#// --!ZZ"&// II"&//#||#	& 	 "$ IIK &fX-NO)nn&   !
Q  !sO   H3AG? H3AG? 1H32EG? >H3?
H0	H+%H0&H3+H00H3z
/end_umrahc                   #     UR                  [        5      R                  [        R                  U :H  [        R                  S:H  5      R                  5       nU(       d  SS0$ SUl        [        R                  " 5       Ul        UR                  5         UR                  U5        SUR                  S.$ ! [         a(  nUR                  5         [        S[        U5      S9eS nAff = f7f)	Nr   r2   zNo active Umrah session found   z Umrah session ended successfully)r2   rd   i  r'   )r3   r   r4   r\   r]   r5   r   r   finish_umrahr:   r;   r*   r{   r   r   r8   )rN   r%   rV   r   s       r?   	end_umrahr     s     <((<(//0D0D0OQ]QdQdhiQijppr>?? '0
		


7=WZZXX <
CF;;<s6   C*AB5 #C*$AB5 4C*5
C'?#C""C''C*z	/add_datamainTask_idr/   subtask_nameri   rj   rk   rl   rm   c	           
         US:X  a   UR                  [        5      R                  [        [        R                  U:H  [        R
                  U :H  5      5      R                  5       n	U	(       a
  [        SSS9e[        UUUUUUU S9n
UR                  U
5        UR                  5         SS0$ US:X  a   UR                  [        5      R                  [        [        R                  U:H  [        R
                  U :H  5      5      R                  5       n	U	(       a
  [        SSS9e[        UUUUUUU S9n
UR                  U
5        UR                  5         SS0$ g !   [        SSS9e= f!   [        SSS9e= f)	Nrg     zSub-task already foundr'   )rx   ri   rj   rk   rl   rm   rq   r2   zSuccess add {gender} taskfemale)r3   r   r4   r   rx   rq   r5   r   r9   r:   r   )r   r/   r   ri   rj   rk   rl   rm   r%   sub_tasknewsub_tasks              r?   ass_datar   %  s   v~	Rxx,33D  L0  K/5  uw  #<TUU#)%%(K FF; 			566			Rxx.55d""l2""k17  uw  #<TUU%)%%(K FF; 			566/ 
	RC8PQQ,	RC8PQQs   BE 2BE% E"%E1z/users/{user_id}c                    UR                  [        5      R                  [        R                  U :H  5      R	                  5       nU(       d
  [        SSS9eUR                  UR                  UR                  UR                  S.$ )Nr   rf   r'   )r*   r+   r,   r/   )	r3   r   r4   r*   r5   r   r+   r,   r/   rN   r%   r$   s      r?   get_userr   X  s\    88D>  G!34::<D4DEE''499tzzT[[YYrA   z/submit-miqat/c                 ^  #    UR                  [        5      R                  [        R                  U R                  :H  5      R	                  5       nU(       d
  [        SSS9eU R                  Ul        UR                  5         UR                  U5        SUR                  UR                  S.$ 7f)Nr   zUmrah session not foundr'   zMiqat updated successfully)r2   r*   rY   )	r3   r   r4   r*   r5   r   rY   r:   r;   )rB   r%   rV   s      r?   submit_miqatr   `  s}     hh|$++LOOtww,FGMMOG4MNNJJGMIIKJJw37::PWP]P]^^s   B+B-z/user_reportc           
      $  #    UR                  [        5      R                  [        R                  U :H  5      R	                  5       nU(       d
  [        SSS9eUR                  S:X  a  [        O[        nUR                  [        5      R                  [        R                  U :H  [        R                  S:H  5      R                  5       n/ nU GH  nUR                  UR                  [        R                  " 5       5      R!                  ["        ["        R$                  UR&                  :H  5      R                  ["        R(                  UR                  :H  ["        R                  S:H  5      R+                  UR                  5      R                  5       nUR                  UR                  [        R                  " 5       5      R!                  ["        ["        R$                  UR&                  :H  5      R                  ["        R(                  UR                  :H  5      R+                  UR                  5      R                  5       nUR-                  UR                  UR.                  UR0                  [3        U5      [3        U5      S.5        GM     XS.$ 7f)	Nr   rf   r'   rg   r   	completed)rd   r^   r   tasks_completedtotal_tasks)rN   history)r3   r   r4   r*   r5   r   r/   r   r   r   r\   r]   rp   ri   r   countjoinr   ru   rv   rt   group_byrw   r^   r   dict)	rN   r%   r$   
task_tablesessionsreportrV   completed_countstotal_countss	            r?   user_reportr   n  s    88D>  G!34::<D4DEE $v 5=Jxx%,,'q  
ce 
 F HHZ%%tzz|4T"$4$<$<
@V@V$VWV 11WZZ? '';6 Xj&&'SU 	 HHZ%%tzz|4T"$4$<$<
@V@V$VWV 11WZZ? Xj&&'SU 	 	!**"..#00#$45-
 	1 @ 22s   JJz/getoverallrt   c                 :   UR                  [        5      R                  [        R                  U :H  5      R	                  5       nUR                  [        5      R                  [        R                  U :H  [        R
                  S:H  5      R	                  5       nX#S.$ )Nr   )r   completed_tasks)r3   r   r4   rt   r   r]   )rt   r%   r   r   s       r?   calculateoverallpercentr     s    ((+,334D4U4UYi4ijpprKhh/0778H8Y8Y]m8mo  pG  pG  KV  pV  W  ]  ]  _O&KKrA   z/raw_tasks/{session_umrah_id}c                    / SQn0 nU H  nUR                  [        5      R                  [        [        R                  [        R
                  :H  5      R                  [        R                  U:H  [        R                  U :H  5      R                  5       nU Vs/ s H  ofR                  UR                  S.PM     snX4'   M     U$ s  snf )N)zPerkara SunatzWajib UmrahzRukun dan Syarat Umrah)r*   r]   )r3   r   r   r   ru   rv   r4   ri   rt   rp   r*   r]   )rt   r%   hukum_categories	raw_tasksri   ro   rn   s          r?   get_raw_tasksr     s    QI! HH%&T+/77;;R;RRSVK%%.0@0Q0QUe0efSU	 	 PUUut77dkkBuU	 "  Vs   "Cz/profile/{user_id})response_modelc                     UR                  [        5      R                  [        R                  U :H  5      R	                  5       nU(       d
  [        SSS9eU$ )Nr   rf   r'   )r3   r   r4   r*   r5   r   r   s      r?   r   r     sB    88D>  G!34::<D4DEEKrA   )9r   fastapir   r   r   
sqlalchemyr   r   sqlalchemy.ext.declarativer	   sqlalchemy.ormr
   r   uuidr   fastapi.middleware.corsr   modelsr   r   r   r   r   r   r   r   r   r   databaser   passlib.contextr   rE   apprG   rH   add_middlewarer6   postr@   r   rI   rW   getr8   rT   rc   r   r   r^   r   r   r   r   r   r   r    rA   r?   <module>r      s    3 3   7 /  2 N  N  N  ( 
 i
	   %%%   H:&A 
29&/ 7
 7 7 76=d = . 012.5fo !
Y !
G !
 3!
H (/ & & & &,c c  ?Fv 3!S 3!C 3!W 3! 3!l KRSY? 
7# 
7 
7C 
77 
7 
7 =DV_ <!s <!# <!7 <! <!B 07 <S <g < <D  EL  MS  ET 07 07C 07S 07s 07c 07WZ 07fi 07ru 07  {B 07 07d 	)0 Zc Zw Z Z 
<CFO 
__ 
_' 
_ 
_ 29&/ -3s -3 -3 -3^ AH Lc Lw L L 	()7>v C W  *$ 	l;)0 c w  <rA   