o
    h!                     @   sP  d dl mZmZmZmZmZmZmZ d dlmZm	Z	 d dl
mZ ddlmZmZmZ d dlZd dlmZ d dlmZmZmZ d d	lmZ d
edefddZdedefddZdedededefddZdedefddZdededededededededefd d!Zdededefd"d#Z d$ededefd%d&Z!eefdedefd'd(Z"dS ))    )FastAPI
UploadFileFileFormHTTPExceptionDependsRequest)datetime	timedelta)Session   )modelsutilsauthN)urljoin)UserBlacklistedTokenStudent)get_dbpathrequestc                 C   s$   | sd S t t|jd| d S )Nz	profiles//)r   strbase_urllstrip)r   r    r   =/var/www/html/vive_backend/app/controllers/auth_controller.pyget_full_url   s   r   mobiledbc                 C   sn   t  }|tjtjj| k }|r||_t	
 |_n
|tj| |d |  t | | | |dS )N)r   otp)Zphoner    )r   Zgenerate_otpqueryr   OTPfilterr   firstr    r	   utcnow
created_ataddcommitZsend_otp)r   r   r    
otp_recordr   r   r   send_otp_logic   s   
r*   r    c                 C   st  | tjtjj| k }|r|j|krtdddt	 |j
tdd kr.tddd| tjtjj| k }|sStj| d}|| |  || || |  dd	d
}ddd
}d }d }	d }
d }d }|jdkr|jrt|jj|}||jjd}	|jj}
|jj}|jj}td|ji}dd|d|j|j|j|j|	|j|j |j|j!||j
|j"ddS )N  Invalid OTPstatus_codedetail   minutesOTP expired)r   r   Parent   r   MaleFemaler6   Unknownsub   z!OTP verified & Login successfullybearer)id
student_id	parent_idnamegenderr   email	user_type	status_idprofile_picturer&   
updated_at)statusmessagetoken
token_typeuser)#r!   r   r"   r#   r   r$   r    r   r	   r%   r&   r
   r   r'   r(   refreshdeleterC   studentr   rE   getrA   doblocationschool_addressr   create_access_tokenr=   r>   r?   r@   rB   rD   rF   )r   r    r   r   r)   rK   user_type_map
gender_maprE   rA   rP   rQ   rR   rI   r   r   r   verify_otp_logic!   sb   


	rV   filereturnc              
   C   s   zDd}t j|st | tt   d| j }t j	||}t
|d}|| j  W d    |W S 1 s=w   Y  |W S  ty[ } ztddt| dd }~ww )Nzapp/profiles_wb  zFailed to save image: r-   )osr   existsmakedirsintr	   r%   	timestampfilenamejoinopenwriterW   read	Exceptionr   r   )rW   
UPLOAD_DIRra   	file_pathfer   r   r   save_profile_pictureo   s    

rk   r@   rA   rB   rP   rQ   rR   rE   c	                 C   s   zOt |}	tj| |||||||	t t d
}
||
 |  ||
 tj|
j	| ||ddt t d}|| |  || |
j	|j	|	ddW S  t
yc } ztdt|dd }~ww )N)
r@   rA   rB   r   rP   rQ   rR   rE   r&   rF   r6   )r>   r@   rB   r   rC   rD   r&   rF   zStudent registered successfully)r>   user_idrE   rH   r[   r-   )rk   r   r   r	   r%   r'   r(   rL   r   r=   rf   r   r   )r@   rA   rB   r   rP   rQ   rR   rE   r   Zprofile_picture_pathZnew_studentZnew_userrj   r   r   r   student_register   sN   




rm   c                 C   sv   | tjtjj| k }|r|j|krtdddt	 |j
tdd kr.tddd|| |  ddiS )	Nr+   r,   r-   r0   r1   r3   verifiedT)r!   r   r"   r#   r   r$   r    r   r	   r%   r&   r
   rM   r(   )r   r    r   r)   r   r   r   
verify_otp   s   
ro   current_userc                 C   s   z_| ttjtjtjtjtjttj	tj
ktj	| j	k }|s)tddd|\}}}}}}	ddd}
ddd}|j	|j|j|j|
|jd	|jt|||||||	d	d
}d|dW S  tys } ztdt|dd }~ww )Ni  zUser not foundr-   r   r4   r5   r7   r8   r9   )r=   r@   r   rB   rC   rD   imagerP   rQ   rR   rA   T)rG   	user_infor[   )r!   r   r   rE   rP   rQ   rR   rA   rb   r=   r>   r#   r$   r   r@   r   rB   rO   rC   rD   r   rf   r   )rp   r   r   resultrK   rE   rP   rQ   rR   rA   rT   rU   rr   rj   r   r   r   get_user_info   sR   
rt   c                 C   s   | j d}|r|dstddd|dd }|tjtjj	|k
 }|r0dd	d
S tj|d}|| |  ddd
S )NAuthorizationzBearer i  zAuthorization header missingr-    r6   TzAlready logged out)rG   rH   )rI   zLogged out successfully)headersrO   
startswithr   splitr!   r   r   r#   rI   r$   r'   r(   )r   r   auth_headerrI   existingZblacklisted_tokenr   r   r   logout  s   


r|   )#fastapir   r   r   r   r   r   r   r	   r
   sqlalchemy.ormr    r   r   r   r\   urllib.parser   
app.modelsr   r   r   app.databaser   r   r   r*   rV   rk   r_   rm   ro   rt   r|   r   r   r   r   <module>   sD   $N	
;7