o
    [h&)                     @   s8  d dl 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 d d	lmZ 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mZmZ d dlmZmZmZmZ dd Z dd Z!G dd deZ"G dd deZ#G dd deZ$G dd deZ%G dd deZ&G dd deZ'dS )     N)APIView)Responsestatus)swagger_auto_schema)openapi)Token)User)now)r   permissions)timezone)	timedelta)IsAuthenticated)Verificationr	   )SendOtpSerializerVerifyOtpSerializerUserRegistrationSerializerUserSerializerc                   C   s   t tddS )Ni  i'  )strrandomrandint r   r   S/var/www/vedio/testing/chatpythonscript.ninositsolution.com/user/views/user_auth.pygenerate_otp   s   r   c                 C   s   t d| d|  |  d S )NzSending OTP z to )print)country_codemobileotpr   r   r   send_otp_to_mobile   s   r   c                   @   s.   e Zd Zeededeidddd ZdS )SendOtpView   zOTP SentzSend OTP to a mobile numberrequest_body	responsesoperation_descriptionc           	      C   s   t |jd}|jdd |jd }|jd }t }|tdd }ztjj	||d}|j
|kr:td	d
dtjdW S W n tjyG   d }Y nw t }t||| tjj|||||dd tdd|dtjdS )NdataTraise_exceptionr   r   <   secondsr   r   errorzAOTP already sent. Please wait 60 seconds before requesting again.r   messager   )r   
created_at
updated_at)r   r   defaultssuccesszOTP sent successfully)r   r/   r   )r   r&   is_validvalidated_datar   r
   r   r   objectsgetr0   r   r   HTTP_429_TOO_MANY_REQUESTSDoesNotExistr   r   update_or_createHTTP_200_OK)	selfrequest
serializerr   r   r
   cooldown_timeverificationr   r   r   r   post   sH   



zSendOtpView.postN)__name__
__module____qualname__r   r   r   r   rA   r   r   r   r   r      s    r   c                   @   s0   e Zd Zeeedddddddd Zd	S )
VerifyOtpViewzOTP Verified SuccessfullyInvalid OTPzVerification not foundr    i    z,Verify the OTP received on the mobile numberr!   c                 C   sb  t |jd}|jdd |jd }|jd }|jd }z
tjj||d}W n tjy9   tdd	d
t	j
d Y S w |jtdd }t |krRtddd
t	jdS |j|kratddd
t	jdS z:tjj||d}tjj|d}	|jd u r~d|_	|  n	 tjj|	d\}
}t|j}tddd|
j|dt	jdW S  tjy   tddddt	jd Y S w )Nr%   Tr'   r   r   r   r,   r-   zVerification record not foundr.   r   r)   r*   zOTP has expiredrF   r   r   username   userr3   zOTP verified and user exists)r   r/   user_existstokenrN   zOTP verified successfullyF)r   r/   rO   )r   r&   r4   r5   r   r6   r7   r9   r   r   HTTP_404_NOT_FOUNDr0   r   r   r
   HTTP_400_BAD_REQUESTr   
Customuserr	   
deleted_atsaver   get_or_creater   keyr;   )r<   r=   r>   r   r   r   r@   expiry_timerN   
customuserrP   _	user_datar   r   r   rA   I   sr   









zVerifyOtpView.postN)rB   rC   rD   r   r   r   r   rA   r   r   r   r   rE   H   s    	rE   c                   @   sL   e Zd Zeejejdgdejejdidedddddd	d
 Z	dS )RestoreUserViewuser_id)typer^   required
propertiesUser restored successfullyUser not found)r    rH   z.Set deleted_at = NULL for a user using user_idr!   c                 C   s   |j d}|stdddtjdS ztjj|d}d|_d |_|  tdd	dtj	dW S  tj
yB   tdd
dtjd Y S w )Nr]   r-   zuser_id is requiredr.   r   )idrL   r3   rb   rc   )r&   r7   r   r   rR   rS   r6   rT   rU   r;   r9   rQ   )r<   r=   r]   rN   r   r   r   rA      s6   
zRestoreUserView.postN)
rB   rC   rD   r   r   SchemaTYPE_OBJECTTYPE_INTEGERr   rA   r   r   r   r   r\      s    r\   c                   @   s.   e Zd Zedededeiddd ZdS )UserRegisterViewzRegister a new user.   User registered successfully)r$   r"   r#   c                 C   s|   t |jd}| r4| }tjj|d\}}tjj|d\}}t |j}tdd|j	||j
dtjdS tdd	d
tjdS )Nr%   rJ   rM   r3   rj   )r   r/   r]   rN   rP   r   r-   zUsername already existsr.   )r   r&   r4   rU   r	   r6   rV   r   r   rd   rW   r   HTTP_201_CREATEDrR   )r<   r=   r>   rY   rN   createdrP   r[   r   r   r   rA      s*   
	zUserRegisterView.postN)rB   rC   rD   r   r   r   r   rA   r   r   r   r   rh      s    rh   c                   @   s   e Zd ZejgZedejdej	dej
dgejejddgejejddejejd	dd
dejddejddejdddddd ZdS )DeleteUserAPIViewzzDelete user account if inactive for 60+ days. If active within 60 days, sets status to offline. Requires a reason and OTP.pkzUser ID)descriptionr^   reasonr   zReason for account deletion)r^   ro   zOTP sent to mobile)rp   r   r_   zSuccess message)ro   zBad requestzUser not found or OTP invalidrG   )r$   manual_parametersr"   r#   c                 C   sR  |j d}|j d}|r|stdditjdS z	tjj|d}W n tjy5   tdditjd Y S w zt	jj|j
|jd}W n t	jyU   tdd	itjd Y S w |j|krdtdd
itjdS |jd u rd|_t |_||_|  td|jdtjdS t |j j}|dkr|  tdditjdS td| d|jdtjdS )Nrp   r   r-   zReason and OTP are required.r   )rn   zUser not found.rI   z"OTP verification record not found.zInvalid OTP.   zBUser marked as deleted. Will be permanently deleted after 60 days.)r/   rT   r)   r/   z6User permanently deleted after 60+ days of inactivity.z#User marked for deletion, but only z days have passed.)r&   r7   r   r   rR   rS   r6   r9   rQ   r   r   r   r   rT   r
   delete_reasonrU   r;   daysdelete)r<   r=   rn   rp   r   rN   r@   inactive_daysr   r   r   rA      sR   


zDeleteUserAPIView.postN)rB   rC   rD   r   r   permission_classesr   r   	ParameterIN_PATHrg   re   rf   TYPE_STRINGr   rA   r   r   r   r   rm      s&    
	

rm   c                   @   s   e Zd ZegZdd ZdS )UserLogoutViewc                 C   sF   |j }tjj|d}d|_|jdgd |j  tdddtj	dS )	N)display_namerr   r   )update_fieldsr3   zLogged out successfullyr.   r   )
rN   rS   r6   r7   r   rU   authru   r   r;   )r<   r=   logged_in_userrN   r   r   r   rA     s   
zUserLogoutView.postN)rB   rC   rD   r   rw   rA   r   r   r   r   r{     s    r{   )(r   rest_framework.viewsr   rest_framework.responser   rest_frameworkr   drf_yasg.utilsr   drf_yasgr   rest_framework.authtoken.modelsr   django.contrib.auth.modelsr	   django.utils.timezoner
   r   django.utilsr   datetimer   rest_framework.permissionsr   user.modelsr   rS   user.serializersr   r   r   r   r   r   r   rE   r\   rh   rm   r{   r   r   r   r   <module>   s.    .D)B